【问题标题】:Outer merging two data frames in place in pandas在熊猫中外部合并两个数据框
【发布时间】:2017-12-09 18:51:04
【问题描述】:

如何在 pandas 中外部合并两个数据框?

例如,假设我们有这两个数据框:

import pandas as pd

s1 = pd.DataFrame({
    'time':[1234567000,1234567005,1234567009],
    'X1':[96.32,96.01,96.05]
},columns=['time','X1'])  # to keep columns order

s2 = pd.DataFrame({
    'time':[1234567001,1234567005],
    'X2':[23.88,23.96]
},columns=['time','X2'])  # to keep columns order

它们可以与pandas.DataFrame.merge (s3 = pd.merge(s1,s2,how='outer')) 或pandas.merge (s3=s1.merge(s2,how='outer')) 合并,但它没有到位。相反,我希望合并的数据框替换内存中的 s1。

【问题讨论】:

  • 您确定可以避免复制吗?有一个copy kwarg 和"If False, do not copy data unnecessarily",但是玩弄它,np.share_memory 建议在你的例子中结果总是被复制。考虑到生成的数据帧与原始数据帧完全不同,这并不奇怪。但我对 pandas 的经验不是很丰富,所以我的印象可能很差。
  • 好吧,因为没有任何inplace 参数,我认为您在这里最多可以做的是s1 = pd.merge(s1,s2,how='outer'),除此之外,我认为没什么可做的了.. 抱歉
  • 感谢您的链接。不过,我可能没有资格回答:) 我的直觉是,只有在非常特殊的情况下才能避免复制(考虑到 .merge 是提供各种操作的非常通用的主力),当结果逐字包含列时原始数据帧。
  • 弗兰克仅供参考I tried to investigate anyway。我说服自己copy kwarg 主要是为了展示,除非一个人在做一些微不足道/奇怪的事情。在你的情况下,我怀疑有一堆实际的连接正在进行,所以不要为你跳过副本:(

标签: python pandas dataframe merge outer-join


【解决方案1】:

由于pandas.merge 中没有inplace 参数,我认为您最多可以做的是:

s1 = pd.merge(s1,s2,how='outer')

除此之外,我认为没有太多事情要做。
希望这对您有所帮助。

【讨论】:

  • 没有in-place merge或者join真的很可惜(即使有索引必须匹配的限制)。
猜你喜欢
  • 2017-06-11
  • 2016-01-01
  • 2021-05-30
  • 2017-09-02
  • 1970-01-01
相关资源
最近更新 更多