Pandas中的combine_first和空值处理

1 投票
1 回答
1610 浏览
提问于 2025-04-18 18:55
      0    1    2
0   nan 3.00  nan
1 -4.00  nan 8.00
2   nan 7.00 4.00

这是df1的内容:

     0    1
0   nan 3.00
1 -4.00  nan
2   nan 7.00

这是df2的内容:

      0   1    2
1 -42.00 nan 8.00
2  -5.00 nan 4.00
df3 = df1.combine_first(df2)

这是我希望df3的样子:

      0    1    2
0   nan 3.00  nan
1 -4.00  nan 8.00
2 -5.00 7.00 4.00

(不同之处在于 df3.ix[2:2,0:0]

也就是说,如果df1和df2中有任何单元格的列和行索引是相同的,我希望df1中的值能够优先显示,即使这个值是nan(表示没有值)。combine_first这个方法可以做到这一点,但当df1中的值是nan时就不行了。

1 个回答

1

这里有一种稍微有点小技巧的方法。首先,把 df2df1 对齐,这样就会创建一个新的框架,它的索引是 df1df2 的合并,里面填充的是 df2 的值。然后再把 df1 的值赋回去。

In [325]: df3, _ = df2.align(df1)

In [327]: df3.loc[df1.index, df1.columns] = df1

In [328]: df3
Out[328]: 
    0   1   2
0 NaN   3 NaN
1  -4 NaN   8
2 NaN   7   4

撰写回答