본문 바로가기

프로그래밍/Python

[PYTHON|PANDAS] pandas.read_csv MemoryError 문제

반응형

대략 아래와 같은 코드로 3기가 짜리 csv 파일을 pandas.read_csv 로 읽으려 했다.


import pandas as pd

df = pd.read_csv('big_dataset.csv')


아래와 같이 MemoryError 를 발생하며 성공하지 못했다.


    return pd.read_csv(train_path)

  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 470, in parser_f

    return _read(filepath_or_buffer, kwds)

  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 256, in _read

    return parser.read()

  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 715, in read

    ret = self._engine.read(nrows)

  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 1164, in read

    data = self._reader.read(nrows)

  File "pandas\parser.pyx", line 758, in pandas.parser.TextReader.read (pandas\parser.c:7411)

  File "pandas\parser.pyx", line 780, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:7651)

  File "pandas\parser.pyx", line 855, in pandas.parser.TextReader._read_rows (pandas\parser.c:8484)

  File "pandas\parser.pyx", line 962, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:9795)

  File "pandas\parser.pyx", line 1022, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:10581)

  File "pandas\parser.pyx", line 1062, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:11158)

  File "pandas\parser.pyx", line 1541, in pandas.parser._try_int64 (pandas\parser.c:18858)

MemoryError


  1. pandas 오래된 버전에 read_csv 에 메모리릭이 있었다는 검색결과 때문에 pandas 도 업데이트 해 보고
  2. StackOverflow 등에서 read_csv 의 iterator, chunksize 옵션을 이용하라는 팁을 보고 적용해 보았지만, read_csv 까지는 문제없이 동작하지만, 결국 데이터를 합치는 pd.concat 함수에서 유사한 에러가 발생했다.
  3. 결국 문제는 32비트 python 을 깔아서 사용했기 때문에, 윈도우에서의 32비트 프로세스의 메모리 한계 때문에 발생한 것이었다. 32비트 python 은 계속 필요하기 때문에, 별도로 설치되는 64비트 anaconda 패키지를 다른 폴더에 설치하고, 간단하게 read_csv 가 성공하는 것을 확인했다. read_csv 가 실행되는 동안 python.exe 사용 메모리는 약 4기가까지 치솟았다.


728x90