2016-11-06 6 views
2

25Kレコードを含む1.2GのCSVファイルを読み込もうとしていますが、それぞれIDと大きな文字列で構成されています。 VMは、140ギガバイトのRAMを持っているので、奇妙なようだパンダread_csv()140GBのRAMを搭載したVM上の1.2GBのファイルメモリ

pandas.io.common.CParserError: Error tokenizing data. C error: out of memory

と10K行でメモリ使用量はわずか約1%以下である:

はしかし、10K行の周りに、私はこのエラーを取得します。

これは私が使用するコマンドです:

pd.read_csv('file.csv', header=None, names=['id', 'text', 'code']) 

また、私は成功し、100%近くまで私の記憶を埋めることができ、次のダミーのプログラムを、走りました。

list = [] 
list.append("hello") 
while True: 
    list.append("hello" + list[len(list) - 1]) 
+0

あなたは 'chunksize'パラメータを使用してチャンク内のファイルを読み込もうとしましたか? – MaxU

+0

@MaxUそれはイテレータを返すので、可能ならば避けたい私のコードでそれを処理しなければならないでしょう –

答えて

4

これはchunksizeのための仕事のように聞こえます。これは、入力プロセスを複数のチャンクに分割し、必要な読み取りメモリを減らします。

tp = pd.read_csv('Check1_900.csv', header=None, names=['id', 'text', 'code'], chunksize=1000) 
df = pd.concat(tp, ignore_index=True) 
+1

各チャンクを結果のDFに連結するループでそれを行います: 'df = pd.DataFrame() ; df = pd.concat([df、x]、ignore_index = True) ' - 結果のDFの__all__チャンクにはRAMは必要ありません – MaxU

+0

うわー、素敵: )ありがとう、それは完全に動作します。元のアプローチが失敗した理由は今ですか? –

+0

@DavidFrankもともとファイルを複数の塊に分割していないため、ファイルを読み込むために必要なメモリが多すぎます。小さなチャンクを読むことは、あなたの記憶の制約のために可能でした。 – kilojoules

1

このエラーは、指定されたメモリエラーではなく、無効なcsvファイルで発生する可能性があります。

使用可能なRAMよりもはるかに小さいファイルでこのエラーが発生し、二重引用符を閉じずに一行に二重引用符があることが判明しました。

この場合、データを確認するか、quoting=3pd.read_csvに渡すなどして、パーサの引用動作を変更することができます。

関連する問題