38

Python3、パンダ 0.12 を使用

複数の csv ファイル (合計サイズは 7.9 GB) を HDF5 ストアに書き込んで、後で処理しようとしています。csv ファイルには、それぞれ約 100 万行、15 列が含まれ、データ型はほとんどが文字列ですが、浮動小数点数もあります。ただし、csv ファイルを読み込もうとすると、次のエラーが発生します。

Traceback (most recent call last):
  File "filter-1.py", line 38, in <module>
    to_hdf()
  File "filter-1.py", line 31, in to_hdf
    for chunk in reader:
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 578, in __iter__
    yield self.read(self.chunksize)
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
    ret = self._engine.read(nrows)
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
    data = self._reader.read(nrows)
  File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
  File "parser.pyx", line 740, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:7146)
  File "parser.pyx", line 781, in pandas.parser.TextReader._read_rows (pandas\parser.c:7568)
  File "parser.pyx", line 768, in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:7451)
  File "parser.pyx", line 1661, in pandas.parser.raise_parser_error (pandas\parser.c:18744)
pandas.parser.CParserError: Error tokenizing data. C error: EOF inside string starting at line 754991
Closing remaining open files: ta_store.h5... done 

編集

この問題を引き起こしたファイルを見つけることができました。EOF文字を読んでいると思います。しかし、私はこの問題を克服する手がかりがありません。結合されたファイルのサイズが大きいことを考えると、各文字列の各文字をチェックするのは面倒すぎると思います。(それでも、どうすればよいかわかりません。)私が確認した限り、エラーを引き起こす可能性のある csv ファイルに奇妙な文字はありません。にも渡そうとしerror_bad_lines=Falseましpd.read_csv()たが、エラーは解決しません。

私のコードは次のとおりです。

# -*- coding: utf-8 -*-

import pandas as pd
import os
from glob import glob


def list_files(path=os.getcwd()):
    ''' List all files in specified path '''
    list_of_files = [f for f in glob('2013-06*.csv')]
    return list_of_files


def to_hdf():
    """ Function that reads multiple csv files to HDF5 Store """
    # Defining path name
    path = 'ta_store.h5'
    # If path exists delete it such that a new instance can be created
    if os.path.exists(path):
        os.remove(path)
    # Creating HDF5 Store
    store = pd.HDFStore(path)

    # Reading csv files from list_files function
    for f in list_files():
        # Creating reader in chunks -- reduces memory load
        reader = pd.read_csv(f, chunksize=50000)
        # Looping over chunks and storing them in store file, node name 'ta_data'
        for chunk in reader:
            chunk.to_hdf(store, 'ta_data', mode='w', table=True)

    # Return store
    return store.select('ta_data')
    return 'Finished reading to HDF5 Store, continuing processing data.'

to_hdf()

編集

CParserError EOF を発生させる CSV ファイルに移動し、問題の原因となっている行の後のすべての行を手動で削除すると、csv ファイルが正しく読み取られます。ただし、とにかく削除しているのは空白行だけです。奇妙なことは、エラーのある csv ファイルを手動で修正すると、それらがストアに個別に正常に読み込まれることです。しかし、複数のファイルのリストを再度使用すると、「false」ファイルがエラーを返します。

4

9 に答える 9

132

同様の問題がありました。'EOF inside string' でリストされた行には、単一引用符を含む文字列が含まれていました。オプションquoting=csv.QUOTE_NONEを追加すると、問題が解決しました。

例えば:

import csv
df = pd.read_csv(csvfile, header = None, delimiter="\t", quoting=csv.QUOTE_NONE, encoding='utf-8')
于 2015-04-24T20:43:41.503 に答える