我有两个大数据框:一个包含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可以提供帮助,但我不知道如何在这种情况下使用它。
请帮忙吗? 谢谢
答案 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$')
有关如何对数据帧进行分区以获得更好的性能的最佳实践的技巧。我认为应该继续阅读。另外,在列名中不要使用$等特殊字符。