ディレクトリ内のすべてのcsvファイルを取り込んで、外部結合を使用してそれらを並べてマージするスクリプトがあります。問題は、自分のコンピュータのチョーク(MemoryError)が、私が参加する必要のあるファイル(約6-12Gbのファイルが約2ダース)に使用しようとすることです。私はitertoolsを使ってループをより効率的にすることができることを知っていますが、この状況に適用できるかどうか、またどのように適用できるかは不明です。私が考えることのできるもう1つの方法は、mySQLをインストールし、基本を学び、これを実行することです。私はすでにそれを学んでいるので、明らかに私はむしろPythonでこれを行うだろう。 Rベースの解決策も受け入れられるだろう。ここで多くの巨大なcsvファイルの効率的なマージ
私のコードです:
import os
import glob
import pandas as pd
os.chdir("\\path\\containing\\files")
files = glob.glob("*.csv")
sdf = pd.read_csv(files[0], sep=',')
for filename in files[1:]:
df = pd.read_csv(filename, sep=',')
sdf = pd.merge(sdf, df, how='outer', on=['Factor1', 'Factor2'])
私のコンピュータのメモリには大きすぎるファイルでこれを行う方法について何かアドバイスをいただければ幸いです。
は、一連のエラーを投げました。その最初のものは次のとおりです。 'run 282、run_code exec(code_obj、self.user_global_ns、self.user_ns)の行2885 ' – Thoughtcraft
going csv - > hdf5 - > csvもう一度対処するには時間がかかるでしょうか?もし私ができるなら、私はCSV - > CSVに行こうとします。 – Kosch
本当ではありません。私のテストでは、HDF5はcsvよりも少なくとも10倍高速です。さらにOPは、出力がcsvでなければならないと言及していない。 OPが処理しなければならないファイルは6〜12GBなので、他の実装ではループを含む非常に精巧なアルゴリズムが必要です。したがって、OPがスーパーコンピュータ上になければ、それほど多くのRAMを持つ可能性はありません。 – Kartik