如果我添加两列来创建第三列,那么任何包含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
Run Code Online (Sandbox Code Playgroud)
在上面,我希望列c为[4,2,4].
谢谢...
jrj*_*rjc 32
与fillna()
frame['c'] = frame.fillna(0)['a'] + frame.fillna(0)['b']
Run Code Online (Sandbox Code Playgroud)
或按照建议:
frame['c'] = frame.a.fillna(0) + frame.b.fillna(0)
Run Code Online (Sandbox Code Playgroud)
给予:
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
Run Code Online (Sandbox Code Playgroud)
DSM*_*DSM 28
另一种方法:
>>> frame["c"] = frame[["a", "b"]].sum(axis=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
Run Code Online (Sandbox Code Playgroud)
小智 8
作为上述答案的扩展,doingframe[["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
Run Code Online (Sandbox Code Playgroud)
如果您希望所有 NaN 的总和为 NaN,您可以添加文档中引用的 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24866 次 |
| 最近记录: |