如果我添加两列来创建第三列,那么任何包含NaN的列(表示我的世界中缺少数据)都会导致结果输出列为NaN。有没有办法在没有明确地将值设置为0的情况下跳过NaN(这会失去那些值是"缺少")的概念?
In [42]: frame = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 4]})
In [44]: frame['c'] = frame['a'] + frame['b']
In [45]: frame
Out[45]:
a b c
0 1 3 4
1 2 NaN NaN
2 NaN 4 NaN
在上面,我希望列c为[4,2,4]。
...谢谢
答案 0 :(得分:29)
用fillna()
frame['c'] = frame.fillna(0)['a'] + frame.fillna(0)['b']
或建议:
frame['c'] = frame.a.fillna(0) + frame.b.fillna(0)
给予:
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
答案 1 :(得分:24)
另一种方法:
>>> frame["c"] = frame[["a", "b"]].sum(axis=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
答案 2 :(得分:2)
作为上述答案的扩展,执行frame[["a", "b"]].sum(axis=1)
将所有NaN的总和填充为0
>>> frame["c"] = frame[["a", "b"]].sum(axis=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
3 NaN NaN 0
如果您希望所有NaN的总和为NaN,则可以添加docs
中引用的min_count标志>>> frame["c"] = frame[["a", "b"]].sum(axis=1, min_count=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
3 NaN NaN NaN