Pandas中的combine_first和空值处理
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
这里有一种稍微有点小技巧的方法。首先,把 df2
和 df1
对齐,这样就会创建一个新的框架,它的索引是 df1
和 df2
的合并,里面填充的是 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