当数据大小那么大时,我应该如何将数据帧label
(800万行)中的df
列合并到另一个数据帧df2
(1.43亿行)中?
基本上我只想将label
列映射到df2
,df
中的所有数据都包含在df2
中,除了label
列之外。无论如何,我可以不用使用merge()
来解决此问题吗?
试图运行以下代码,但它可以连续运行5个小时,但没有响应。
result = pd.merge(df,df2,on=["X", "Y", "Z"], how='left')
result
df
df2
答案 0 :(得分:1)
我可以在这里看到一些显而易见的事情,您可以这样做:
X
/ Y
/ Z
列和R
/ G
/ B
列添加标签是多余的,然后删除R
的{{1}} / G
/ B
列,因为您在最终数据框中不需要它们,并且您当然也不需要它们被重复了1.43亿次。df
/ X
/ Y
的独特值及其数据类型的多少,您可以使用以下分类数据类型来减少内存占用: / li>
Z
# Convert to categorical data types (if every value is unique, don't bother!)
for df_temp in [df, df2]:
for col in ['X', 'Y', 'Z']:
df_temp.loc[:, col] = df_temp[col].astype('category')
# Merge using less memory
result = pd.merge(df, df2, on=["X", "Y", "Z"], how='left')
并分别进行处理,然后将各个结果连接起来以得到最终结果,例如:X
这可能仍然不起作用,因为在进行最终串联时,您仍然需要在短时间内两次在内存中设置全部数据!
如果这些都不起作用,恐怕您需要更多的内存,或者您需要使用除Pandas之外的其他东西来解决您的问题。