Pandas:如何将两个不完整的数据帧合并或合并为一个完整的数据帧

Posted

技术标签:

【中文标题】Pandas:如何将两个不完整的数据帧合并或合并为一个完整的数据帧【英文标题】:Pandas: How to concat or merge two incomplete dataframe into one more complete dataframe 【发布时间】:2021-10-16 15:21:21 【问题描述】:

我想将两个不完整的数据框与关于相似索引的相同数据(理论上)连接起来。 我尝试使用 pd.concat 但我没有得到我需要的东西。

这是我想做的一个简单示例:

     df1 = pd.DataFrame(
    
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B4"],
        "C": ["C0", "C1", "C2", "B5"],
        "D": [np.nan,np.nan,np.nan,np.nan,]
    ,
    index=[0, 1, 2, 3],)

df2 = pd.DataFrame(
    
        "A": ["A0", "A1", "A5", "A6"],
        "B": ["B0", "B1", "B5", "B6"],
        "C": [np.nan,np.nan,np.nan,np.nan,],
        "D": ["D0", "D1", "D5", "D6"],
    ,
    index=[0, 1, 5, 6]
)

res_expected = pd.DataFrame(
    
        "A": ["A0",  "A1",  "A2",  "A3", "A5", "A6"],
        "B": ["B0",  "B1",  "B2",  "B3",  "B5", "B6"],
        "C": ["C0",  "C1",  "C2",  "B5",np.nan,np.nan,],
        "D": ["D0",  "D1",  np.nan,np.nan,"D5", "D6"],
    ,
    index=[0, 1, 2, 3, 5, 6]
)
    

有人有想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

可以使用combine_first(),如下:

df_result = df1.combine_first(df2)

combine_first() 的工作原理如下:

通过在一个 DataFrame 中填充空值来组合两个 DataFrame 对象 来自其他 DataFrame 的非空值。行和列索引 生成的 DataFrame 将是两者的并集。

结果:

print(df_result)

    A   B    C    D
0  A0  B0   C0   D0
1  A1  B1   C1   D1
2  A2  B2   C2  NaN
3  A3  B4   B5  NaN
5  A5  B5  NaN   D5
6  A6  B6  NaN   D6

【讨论】:

太棒了!非常感谢!! @timebis 很高兴为您提供帮助!编程愉快!【参考方案2】:
res_expected=df1.append(df2,ignore_index=True)

这应该可以工作

【讨论】:

感谢您的回答,但它不起作用。我希望它与索引合并。问候

以上是关于Pandas:如何将两个不完整的数据帧合并或合并为一个完整的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 追加、连接、连接或合并两个数据框

如何根据多个条件将 1 个 pandas 数据帧合并或组合到另一个数据帧

当我合并两个数据帧时,如何防止 Pandas 将我的整数转换为浮点数?

使用不同的时间间隔合并并填充Pandas中的两个数据帧

合并两个不同长度的python pandas数据帧,但将所有行保留在输出数据帧中

Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)