pandas는 여러 데이터 형태를 DB형태(엑셀 형태)로 볼수있고, 직관적인 명령어들을 써서 python으로 손쉽게 데이터를 수정 및 관리할 수 있는 좋은 라이브러리 입니다.
그런데 pd.read_csv또는 pd.read_excel을 사용하다보면 C error: out of memory error와 같은 에러가 발생하는 경우가 있습니다.
-원인-
csv, xlsx의 행 또는 셀 갯수가 너무 많아(용량이 너무 커서) 메모리 에러가 발생한 것 입니다.
-해결방법-
결론: 사용하는 메모리의 총량을 줄이면 됩니다.
1) 메모리 증설(하드웨어 성능 데이트)
램을 증설하여 사용가능한 메모리를 늘려줍니다.
2) 불필요한 사용중인 메모리 제거(RAMMap)
MS에서 제공하는 메모리 정리 도구 RAMMap을 사용하여 사용하지 않는 대기 메모리를 제거 해줍니다.
https://docs.microsoft.com/ko-kr/sysinternals/downloads/rammap
3) Dataframe을 읽어올때 행 갯수를 제한합니다.(chunksize=행 갯수 제한)
file_name='엑셀 파일 위치/Excel.csv'
chunksize=1000 #행을 1000개씩 읽기
total_list=[] #chunk는 리스트 형태입니다, 불러온 chunk를 모아 1개의 list로 만들기 위한 빈 리스트 입니다.
for count, chunk in enumerate(pd.read_csv(file_name,chunksize=chunksize)):
total_list.append(chunk)
total_data = pd.concat(total_list, axis= 0)
total_data가 우리가 원했던 dataframe입니다.
4) Dask 사용하기
Dask라이브러리는 병렬 처리를 통해 chunk와 같이 여러개의 Dag를 생성하여 대용량 데이터도 빠르게 처리가 가능한 라이브러리이다.
import dask.dataframe as Dask
df = Dask.read_csv("File_name.csv")
Dask는 pandas dataframe의 함수를 그대로 사용가능하며, 원한다면 pands df로도 변환이 가능합니다.
끝.
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[번역 API]파파고 API 사용하기 -2 (2) | 2023.11.06 |
---|---|
[Python/Dataframe]Dataframe NaN을 np.NaN으로 필터링 되지 않을때 can not filterd NaN dataframe using np.nan - 해결[Solved] (0) | 2023.10.31 |
[셀레니움/selenium]AttributeError: 'str' object has no attribute 'capabilities' error 해결[Solved] (0) | 2023.10.30 |
[selenium]log type 'performance' not found[Solve] 해결하기 (0) | 2023.10.17 |
왜 가상환경을 만들어야 하는데? (1) | 2023.10.06 |