2017-01-01 5 views
1

대용량 팬더 (18.1 버전)를 csv 형식으로 저장 한 DataFrames (30GB 요약)입니다. 그러나 read_csv로 작업하면 메모리 소비가 초기 CSV의 두 배로 증가합니다. 파일 -> 60 GB. 나는 chunksize 매개 변수에 대해 알고 있습니다. 그러나 이것은 느린 방법이었고 실제로 메모리 사용을 줄이지는 못했습니다. 나는 4GB DataFrame으로 시험해 보았다. DataFrame을 읽은 후에도 스크립트는 여전히 7GB RAM을 소비했습니다. 여기 내 코드 :pandas read_csv 메모리 사용량

df = None 

for chunk in pandas.read_csv(fn, chunksize=50000): 
     if df is None: 
       df = chunk 
     else: 
       df = pandas.concat([df, chunk]) 

이것은 짧은 버전입니다. dtype을 지정하면 메모리가 절약된다는 것도 알고 있습니다. 그래서 여기에 내 질문이있다. 거대한 팬더 데이터 프레임을 읽는 가장 좋은 방법은 무엇입니까 (성능, 메모리)?

+0

다음을 시도해보십시오 :'df = pd.concat (x는 pd.read_csv (fn, chunksize = 50000)에서) – MaxU

+0

시도해 보았습니다. 불행히도 이것은 아무런 변화가 없습니다. – Hansi

답변

0

데이터 프레임에서 수행하려는 작업 유형에 따라 dask이 유용 할 수 있습니다. 주요 기능 중 하나는 메모리보다 큰 데이터 프레임에서의 작업을 허용하는 것입니다. 예를 들어,보다 큰 메모리 dataframe에 GROUPBY 일 :

import dask.dataframe as dd 
df = dd.read_csv(fn) 
df_means = df.groupby(key).mean().compute() 

주의 끝에 compute()의 추가 전형적인 팬더 groupby 동작에 비해.