본문 바로가기
프로그래밍/Python

[python/pandas]pandas.errors.ParserError: Error tokenizing data. C error: out of memory error 해결[Solved]

by Mr.noobiest 2023. 10. 31.

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

 

RAMMap - Sysinternals

여러 탭에서 다양한 방식으로 사용 정보를 제공하는 고급 실제 메모리 사용량 분석 유틸리티입니다.

learn.microsoft.com


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
반응형