이미 제공된 잠재적 인 솔루션 중 대부분을 기반으로보다 포괄적 인 답변을 원합니다. 또한 독서 과정에 도움이 될 수있는 또 하나의 잠재적 인 원조를 지적하고 싶습니다.
옵션 1 : dtypes
"dtypes"는 read
메소드 의 메모리 압력을 줄이는 데 사용할 수있는 매우 강력한 매개 변수입니다 . 참조 이 와 이 대답을. 팬더는 기본적으로 데이터의 dtype을 유추하려고합니다.
데이터 구조를 참조하면, 저장된 모든 데이터는 메모리 할당이 발생합니다. 기본 수준에서 아래 값을 참조하십시오 (아래 표는 C 프로그래밍 언어의 값을 보여줍니다).
The maximum value of UNSIGNED CHAR = 255
The minimum value of SHORT INT = -32768
The maximum value of SHORT INT = 32767
The minimum value of INT = -2147483648
The maximum value of INT = 2147483647
The minimum value of CHAR = -128
The maximum value of CHAR = 127
The minimum value of LONG = -9223372036854775808
The maximum value of LONG = 9223372036854775807
이것을 참조하십시오 NumPy와 C 및 유형 간의 일치를 표시 페이지.
정수 자릿수 배열이 있다고 가정 해 봅시다 . 이론적으로나 실제적으로 16 비트 정수 유형의 배열을 할당 할 수 있지만 실제로 해당 배열을 저장하는 데 필요한 것보다 더 많은 메모리를 할당합니다. 이를 방지하기 위해 dtype
옵션을 on으로 설정할 수 있습니다 read_csv
. 배열 항목을 실제로는 8 비트 정수 ( np.int8
또는np.uint8
)로 .
다음 dtype 맵을 확인하십시오.
출처 : https://pbpython.com/pandas_dtypes.html
{column : type}과 같은 dtype
pandas 메소드에서 매개 변수로 매개 변수를 전달할 수 있습니다 read
.
import numpy as np
import pandas as pd
df_dtype = {
"column_1": int,
"column_2": str,
"column_3": np.int16,
"column_4": np.uint8,
...
"column_n": np.float32
}
df = pd.read_csv('path/to/file', dtype=df_dtype)
옵션 2 : 덩어리로 읽기
청크 단위로 데이터를 읽으면 메모리의 일부 데이터에 액세스 할 수 있으며 데이터에 사전 처리를 적용하고 원시 데이터가 아닌 처리 된 데이터를 보존 할 수 있습니다. 이 옵션을 첫 번째 옵션 인 dtypes 와 결합하면 훨씬 좋습니다 .
해당 프로세스에 대한 팬더 요리 책 섹션을 가리키고 싶습니다 . 여기에서 찾을 수 있습니다 . 이 두 섹션을 참고하십시오.
옵션 3 : Dask
Dask는 Dask 웹 사이트 에서 다음과 같이 정의 된 프레임 워크입니다 .
Dask는 분석을위한 고급 병렬 처리 기능을 제공하여 원하는 도구에 대해 대규모 성능을 제공합니다.
팬더가 도달 할 수없는 필요한 부분을 덮기 위해 탄생했습니다. Dask는 분산 방식으로 처리하여 훨씬 더 많은 데이터에 액세스 할 수있는 강력한 프레임 워크입니다.
dask를 사용하여 데이터 전체를 전처리 할 수 있으며 Dask는 청킹 부분을 처리하므로 팬더와 달리 처리 단계를 정의하고 Dask가 작업을 수행하도록 할 수 있습니다. Dask는 compute
및 / 또는 명시 적으로 푸시하기 전에 계산을 적용하지 않습니다 persist
( 차이는 여기 의 답변 참조 ).
기타 보조기구 (아이디어)
- 데이터를 위해 설계된 ETL 흐름. 원시 데이터에서 필요한 것만 유지합니다.
- 먼저 Dask 또는 PySpark와 같은 프레임 워크를 사용하여 전체 데이터에 ETL을 적용하고 처리 된 데이터를 내 보냅니다.
- 그런 다음 처리 된 데이터가 전체 메모리에 맞는지 확인하십시오.
- RAM을 늘리십시오.
- 클라우드 플랫폼에서 해당 데이터 작업을 고려하십시오.