2017-02-04 16 views
0

pandasモジュールを使用してpython Spyderに大きなcsvファイル(約17GB)を読み込もうとしています。ここに私のコードcsvファイルをPythonに読み込むときのCParserError Spyder

data =pd.read_csv('example.csv', encoding = 'ISO-8859-1') 

があるしかし、私はCParserErrorエラーメッセージに

Traceback (most recent call last): 

File "<ipython-input-3-3993cadd40d6>", line 1, in <module> 
data =pd.read_csv('newsall.csv', encoding = 'ISO-8859-1') 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 562, in parser_f 
return _read(filepath_or_buffer, kwds) 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 325, in _read 
return parser.read() 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 815, in read 
ret = self._engine.read(nrows) 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1314, in read 
data = self._reader.read(nrows) 

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

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

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

File "pandas\parser.pyx", line 868, in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:9602) 

File "pandas\parser.pyx", line 1865, in pandas.parser.raise_parser_error (pandas\parser.c:23325) 

CParserError: Error tokenizing data. C error: out of memory 

を得続ける私はこの問題に関するいくつかの議論がある承知していますが、それは非常に具体的なようで、場合に応じて変化します。誰でもここで私を助けることができますか?

私はWindowsシステムでpython 3を使用しています。前もって感謝します。

EDIT:

ResMarによって示唆されるように、そして、私は次のコード

を試してみました、私は次のコード

data = pd.DataFrame() 
reader = pd.read_csv('newsall.csv', encoding = 'ISO-8859-1', chunksize = 10000) 
for chunk in reader: 
    data.append(chunk, ignore_index=True) 

を試してみました。しかし、それは

data.shape 
Out[12]: (0, 0) 

で何も返しません

data = pd.DataFrame() 
reader = pd.read_csv('newsall.csv', encoding = 'ISO-8859-1', chunksize = 10000) 
for chunk in reader: 
    data = data.append(chunk, ignore_index=True) 

それが再びメモリエラーが不足し示し、ここにトラックバック

Traceback (most recent call last): 

File "<ipython-input-23-ee9021fcc9b4>", line 3, in <module> 
for chunk in reader: 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 795, in __next__ 
return self.get_chunk() 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 836, in get_chunk 
return self.read(nrows=size) 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 815, in read 
ret = self._engine.read(nrows) 

File "I:\Program Files\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1314, in read 
data = self._reader.read(nrows) 

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

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

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

File "pandas\parser.pyx", line 868, in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:9602) 

File "pandas\parser.pyx", line 1865, in pandas.parser.raise_parser_error (pandas\parser.c:23325) 

CParserError: Error tokenizing data. C error: out of memory 

答えて

0

は、あなたのエラーが何であるかをかなり明白であることを私には思えるです:コンピュータがメモリ不足。ファイルそのものは17GBで、大雑把にはpandasはそのファイルを読み込むとその約2倍の容量を占めます。このデータを直接読み取るにはの周りにのRAMが必要です。

最近のコンピュータのほとんどは、4,8、または16 GBです。いくつかのコンピュータには32があります。コンピュータのメモリが不足していると、Cはプロセスを終了します。

これを回避するには、データを塊で読み込んで、各セグメントごとに何度でもやり直してください。それについての詳細は、pd.read_csvからchunksizeパラメータを参照してください、しかし、あなたは基本的にのようなものをお勧めします:答えを

for chunk in pd.read_csv("...", chunksize=10000): 
    do_something() 
+0

感謝を。私はちょうどデータフレームとしてデータを読み込みたいですが、do_somethingのコードは何でしょうか? –

+0

これはあなたが決定するためのものです。 –

+0

私の編集した質問を見ていただけますか?それでもエラーは発生します。 –

関連する問題