我几乎在整个互联网上进行搜索,但对于我来说,这些方法似乎都不起作用。

我有两个大型的csv文件(每个文件都有一百万+行,大小约为300-400MB)。它们可以使用read_csv函数很好地加载到数据帧中,而不必使用chunksize参数。
我什至对这些数据执行了一些次要的操作,例如新的列生成,过滤等。

但是,当我尝试合并这两个框架时,我得到了 MemoryError 。我什至尝试使用SQLite完成合并,但徒劳无功。该操作需要永远。

我的是Windows 8 PC,具有8GB RAM。 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。

08-07 16:37
查看更多