96

私は長年のSASユーザーとしてPythonとパンダへの切り替えを模索しています。

pandas.read_csv()しかし、今日いくつかのテストを実行したとき、128MBのcsvファイルを作成しようとしたときにPythonがメモリを使い果たしたことに驚きました。約200,000行と200列のほとんどが数値データでした。

SASを使用すると、csvファイルをSASデータセットにインポートでき、ハードドライブと同じ大きさにすることができます。

似たようなものはありpandasますか?

私は定期的に大きなファイルを処理していますが、分散コンピューティングネットワークにアクセスできません。

4

6 に答える 6

84

ウェスはもちろんそうです!もう少し完全なサンプルコードを提供するために、私はちょうどチャイムを鳴らしています. 129 Mb のファイルで同じ問題が発生しましたが、次の方法で解決されました。

import pandas as pd

tp = pd.read_csv('large_dataset.csv', iterator=True, chunksize=1000)  # gives TextFileReader, which is iterable with chunks of 1000 rows.
df = pd.concat(tp, ignore_index=True)  # df is DataFrame. If errors, do `list(tp)` instead of `tp`
于 2012-08-30T08:57:26.267 に答える
82

原則としてメモリ不足になることはありませんが、現在read_csv、いくつかの複雑な Python 内部の問題が原因で、大きなファイルでメモリの問題が発生しています (これは漠然としていますが、長い間知られています: http://github.com/pydata /pandas/issues/407 )。

現時点では完璧な解決策はありません (これは面倒な解決策です: ファイルを行ごとに事前に割り当てられた NumPy 配列またはメモリ マップされたファイルに転記することができますnp.mmap)。近日中に。もう 1 つの解決策は、ファイルを小さな断片に分けて読み取り ( を使用iterator=True, chunksize=1000)、連結してから を使用することpd.concatです。問題が発生するのは、テキスト ファイル全体を一度に大量にメモリに取り込む場合です。

于 2012-07-24T01:10:50.813 に答える
1

pandas df ではなく Pytable を使用できます。大規模なデータ セット用に設計されており、ファイル形式は hdf5 です。そのため、処理時間は比較的高速です。

于 2017-02-10T17:38:48.293 に答える