合并熊猫中的两个大型数据框

时间:2020-07-21 07:00:34

标签: python pandas dataframe large-data

当数据大小那么大时,我应该如何将数据帧label(800万行)中的df列合并到另一个数据帧df2(1.43亿行)中?

基本上我只想将label列映射到df2df中的所有数据都包含在df2中,除了label列之外。无论如何,我可以不用使用merge()来解决此问题吗?

试图运行以下代码,但它可以连续运行5个小时,但没有响应。

result = pd.merge(df,df2,on=["X", "Y", "Z"], how='left')
result

df

enter image description here

df2

enter image description here

1 个答案:

答案 0 :(得分:1)

我可以在这里看到一些显而易见的事情,您可以这样做:

  1. 假设您只想基于X / Y / Z列和R / G / B列添加标签是多余的,然后删除R的{​​{1}} / G / B列,因为您在最终数据框中不需要它们,并且您当然也不需要它们被重复了1.43亿次。
  2. 根据df / X / Y的独特值及其数据类型的多少,您可以使用以下分类数据类型来减少内存占用: / li>
Z
  1. 最后,您可以尝试对数据进行分区并进行破坏性转换,创建几个数据帧,每个数据帧均包含非重叠范围内的# 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之外的其他东西来解决您的问题。

相关问题