在 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 中的所有列的主要内容,如果未能解决你的问题,请参考以下文章