約1000〜2000個のCSVファイルのセットに対してouter
マージを実行するためにパンダを使用しています。各CSVファイルには、すべてのCSVファイル間で共有される識別子列id
がありますが、各ファイルには3〜5列の固有の列があります。各ファイルには約2万の一意のid
行があります。私がしたいのは、これらをまとめて、すべての新しい列をまとめて、マージインデックスとしてid
列を使用することだけです。Pythonのパンダと大規模にマージするMemoryError
私はそれが簡単なmerge
呼び出しを使用して行います。
merged_df = first_df # first csv file dataframe
for next_filename in filenames:
# load up the next df
# ...
merged_df = merged_df.merge(next_df, on=["id"], how="outer")
問題はほぼ2000 CSVファイルで、私はパンダによってスローmerge
操作でMemoryError
を得るということです。私はこれがマージ操作の問題のために制限されている場合はわからないのですか?
最終的なデータフレームの行数は20,000で、おおよそ(2000 x 3)= 6000です。これは大きいですが、20 GBを超えるRAMを使用しているコンピュータのすべてのメモリを消費するのに十分な大きさではありません。このサイズはパンダの操作には大きすぎますか?代わりにsqliteのようなものを使うべきですか?このスケールで動作させるために、merge
操作で変更できるものはありますか?
ありがとうございました。
を無視されている場合、あなたは代わりの世代の表現を使用することができるはずですしながら、しかし、1は、この機能が参加しないように注意する必要があるのではなく、水平アペンドリストの理解...(concatの内部動作についてはわかりません) – root
@rootよく、ジェネレータはもっと良いと思います(最悪の場合はリストに変換します):) –
@root良い点btw ! (tbh私はコンカットがジェネレータを受け入れることを知らなかった!) –