【发布时间】:2019-03-14 16:03:31
【问题描述】:
我正在尝试根据在每个数据框中找到的一列(称为“名称”)中的匹配值来连接两个数据框(df1 和 df2)。我已经尝试过使用 R 的 inner_join 函数以及 Python 的 pandas merge 函数,并且已经能够使两者都在我的数据的较小子集上成功工作。我认为我的问题在于我的数据框的大小。
我的数据框如下:
-
df1的“名称”列有 5 个附加列,并且有大约 900 行。 -
df2的“名称”列有约 200 万列和约 900 行。
我已经尝试过(在 R 中):
df3 <- inner_join(x = df1, y = df2, by = 'Name')
我也尝试过(在 Python 中,df1 和 df2 是 Pandas 数据框):
df3 = df1.merge(right = df2, how = 'inner', left_on = 1, right_on = 0)
(其中“名称”列位于 df1 的索引 1 和 df2 的索引 0)
当我将上述内容应用于我的完整数据帧时,它会运行很长时间并最终崩溃。此外,我怀疑问题可能出在我的df2 的 200 万列上,所以我尝试将它(按行)子设置为更小的数据帧。我的计划是将df2 的小子集与df1 结合起来,然后在最后将新的数据帧绑定在一起。然而,即使是更小的分区df2s 也不能成功。
如果有人能提供任何建议,我将不胜感激。
【问题讨论】:
-
您能谈谈各个对象的内存占用量(以 MB/GB 为单位)以及您可用的操作系统/内存量吗?
-
尝试使用
data.table。 -
你的列应该是行吗?重塑为长格式可能会简化事情。
-
如果内存问题是一个问题,并且您想使用 python,您可以尝试使用 dask 数据框。 docs.dask.org/en/latest/dataframe.html -
-
这是 1:1、1:many many:1 还是 many:many 合并?
标签: python r pandas merge inner-join