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