대략 아래와 같은 코드로 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
- pandas 오래된 버전에 read_csv 에 메모리릭이 있었다는 검색결과 때문에 pandas 도 업데이트 해 보고
- StackOverflow 등에서 read_csv 의 iterator, chunksize 옵션을 이용하라는 팁을 보고 적용해 보았지만, read_csv 까지는 문제없이 동작하지만, 결국 데이터를 합치는 pd.concat 함수에서 유사한 에러가 발생했다.
- 결국 문제는 32비트 python 을 깔아서 사용했기 때문에, 윈도우에서의 32비트 프로세스의 메모리 한계 때문에 발생한 것이었다. 32비트 python 은 계속 필요하기 때문에, 별도로 설치되는 64비트 anaconda 패키지를 다른 폴더에 설치하고, 간단하게 read_csv 가 성공하는 것을 확인했다. read_csv 가 실행되는 동안 python.exe 사용 메모리는 약 4기가까지 치솟았다.
'프로그래밍 > Python' 카테고리의 다른 글
TORNADO too many file descriptors in select() (0) | 2015.11.17 |
---|---|
twisted counter 연습문제 (0) | 2015.04.15 |
[번역|StackOverflow] 파이썬 람다 - 왜써? / Python Lambda - why? (0) | 2011.10.18 |
[Py] 신이 보여준 정리 (2) | 2009.07.24 |
[Py] 중복된 숫자 집합을 주어진 합으로 분할하기 (0) | 2009.07.23 |