私はほとんどインターネットで検索しましたが、どういうわけか私のアプローチではうまくいかないようです。
2つの大きなcsvファイルがあります(それぞれ100万行以上、サイズが約300〜400MB)。 read_csv関数を使用して、chunksizeパラメーターを使用せずに、データフレームに正常にロードしています。新しい列の生成、フィルタリングなど、このデータに対して特定のマイナーな操作を実行しました。
ただし、これら2つのフレームをマージしようとすると、MemoryErrorが返されます。マージを達成するためにSQLiteを使用しようとしましたが、無駄でした。操作は永遠にかかります。
私のものは、8GB RAMを備えたWindows 7 PCです。 Pythonバージョンは2.7
ありがとうございました。
編集:私もチャンク方法を試してみました。これを行うと、MemoryErrorは発生しませんが、RAM使用が爆発し、システムがクラッシュします。
Pandas.mergeを使用してデータをマージする場合、df1メモリ、df2メモリ、merge_dfメモリを使用します。メモリエラーが発生する理由だと思います。 df2をcsvファイルにエクスポートし、chunksizeオプションを使用してデータをマージする必要があります。
より良い方法かもしれませんが、これを試すことができます。 *大きなデータセットの場合、pandas.read_csvでchunksizeオプションを使用できます
df1 = pd.read_csv("yourdata.csv")
df2 = pd.read_csv("yourdata2.csv")
df2_key = df2.Colname2
# creating a empty bucket to save result
df_result = pd.DataFrame(columns=(df1.columns.append(df2.columns)).unique())
df_result.to_csv("df3.csv",index_label=False)
# save data which only appear in df1 # sorry I was doing left join here. no need to run below two line.
# df_result = df1[df1.Colname1.isin(df2.Colname2)!=True]
# df_result.to_csv("df3.csv",index_label=False, mode="a")
# deleting df2 to save memory
del(df2)
def preprocess(x):
df2=pd.merge(df1,x, left_on = "Colname1", right_on = "Colname2")
df2.to_csv("df3.csv",mode="a",header=False,index=False)
reader = pd.read_csv("yourdata2.csv", chunksize=1000) # chunksize depends with you colsize
[preprocess(r) for r in reader]
これにより、マージされたデータがdf3として保存されます。