合并两个大数据框

时间:2019-01-31 14:38:37

标签: python pandas dataframe merge

我有两个大数据框:一个包含3M行,另一个包含2M行 第一个数据帧:

    sacc_id$    id$     creation_date
0   0011200001LheyyAAB  5001200000gxTeGAAU  2017-05-30 13:25:07 

第二个数据帧:

    sacc_id$    opp_line_id$    oppline_creation_date
0   001A000000hAUn8IAG  a0WA000000BYKoWMAX  2013-10-26

我需要合并它们:

case = pd.merge(limdata, df_case, left_on='sacc_id$',right_on='sacc_id$')

但是我遇到内存问题:

pandas/_libs/join.pyx in pandas._libs.join.inner_join()

MemoryError: 

还有另一种有效的方法。我在这里的一些讨论中读到,Dask可以提供帮助,但我不知道如何在这种情况下使用它。

请帮忙吗? 谢谢

1 个答案:

答案 0 :(得分:0)

在处理大型数据帧时,建议使用Dask。 Dask支持Pandas数据框和Numpy数组数据结构,并且可以在本地计算机上运行,​​也可以扩展到在集群上运行。

您可以轻松地将Pandas数据框转换为由较小的拆分Pandas数据框组成的Dask,因此可以使用Pandas查询语法的子集。

下面是如何执行此操作的示例:

import dask.dataframe as dd

limdata= dd.read_csv(path_to_file_1)
df_case= dd.read_csv(path_to_file_2)

case = dd.merge(limdata, df_case, left_on='sacc_id$',right_on='sacc_id$')

有关如何对数据帧进行分区以获得更好的性能的最佳实践的技巧。我认为应该继续阅读。另外,在列名中不要使用$等特殊字符。