在 Pandas/Python 中合并两个数据框,保留数据框 1 中的所有列

Posted

技术标签:

【中文标题】在 Pandas/Python 中合并两个数据框,保留数据框 1 中的所有列【英文标题】:Merging two dataframes in Pandas/Python keeping all columns from dataframe 1 【发布时间】:2021-04-11 17:28:11 【问题描述】:

数据框 1 是一个空数据框,用于设置列的“标题”:

Header Green Header Yellow Header Red

数据框 2 包含实际行,但某些列可能与数据框 1 不同。

Header Green Header Yellow Header Purple
Data Green Data Yellow Data Purple

在生成的数据框中,我想将两个数据框堆叠在一起,但只保留 dataframe1 中的列(即绿色、黄色、红色)。最终的数据框应该是:

Header Green Header Yellow Header Red
Data Green Data Yellow Blank

明确一点,决赛桌:

1 保留数据框 1 中的所有列

2 添加数据框 2 中的数据,其中列与数据框 1 相同

3 删除数据帧 2 中不在最终数据帧中的数据帧 1 中的任何列。

不幸的是,数据框中有很多列,因此解决方案需要了解要保留哪些列,而不是数据框中现有的名称。

谢谢!

【问题讨论】:

您不需要数据框 1 中的任何数据吗?如果是这种情况,只需列出数据框 2 中位于数据框 1 中的列:cols_to_keep = [col for col in df2.columns if col in df1.columns],然后使用该列列表从数据框 2 中进行选择:df_new = df1[cols_to_keep] 谢谢,设法做到这一点,但这意味着 df_new 不会保存 df1 中的所有列,其中列不在 df2 中的空值。所以在上面,使用这个解决方案我不会在结果数据框中得到 Header Red? 啊,明白了。错过了您需要具有空值的列的事实。 【参考方案1】:

除非数据集很大,否则我觉得这样可以解决您的问题:

只需在之后进行连接和切片

pd.concat([df,df2])[df.columns]

【讨论】:

【参考方案2】:

我认为这里使用df.reindex 的答案实际上完全符合您的要求:https://***.com/a/43995812/9357244

df_new = df2.reindex(columns = df.columns)

如果它们是df 中的列,将保留df2 中的列。任何缺失的列都将被实例化为空值。

【讨论】:

非常感谢,这绝对成功了。举个例子,下面的代码做我想要的: import pandas as pd df1=pd.DataFrame(columns=["a","b","c"]) data="a":[1,2 ],"b":[3,4],"d":[5,7] df2=pd.DataFrame(data) df_new = df2.reindex(columns = df1.columns) print(df_new)

以上是关于在 Pandas/Python 中合并两个数据框,保留数据框 1 中的所有列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pandas Python 中合并时避免笛卡尔坐标

在 Pandas 中合并两个大型数据框

在保持原始行顺序的同时合并两个数据框

数据框中所有可能的列组合 -pandas/python

在python pandas中合并两个数据框[重复]

如何在熊猫中合并两个数据框以替换 nan