如何在熊猫的多列中填写 NA 值?

新手上路,请多包涵

我有一个包含 50 列的数据框。我想在 10 列中用 0 替换 NA。

最简单、最易读的方法是什么?

我希望是这样的:

 cols = ['a', 'b', 'c', 'd']
df[cols].fillna(0, inplace=True)

但这给了我 ValueError: Must pass DataFrame with boolean values only

我找到 了这个答案,但很难理解。

原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 491
2 个回答

你可以使用 update()

 In [145]: df
Out[145]:
    a   b   c  d  e
0 NaN NaN NaN  3  8
1 NaN NaN NaN  8  7
2 NaN NaN NaN  2  8
3 NaN NaN NaN  7  4
4 NaN NaN NaN  4  9
5 NaN NaN NaN  1  9
6 NaN NaN NaN  7  7
7 NaN NaN NaN  6  5
8 NaN NaN NaN  0  0
9 NaN NaN NaN  9  5

In [146]: df.update(df[['a','b','c']].fillna(0))

In [147]: df
Out[147]:
     a    b    c  d  e
0  0.0  0.0  0.0  3  8
1  0.0  0.0  0.0  8  7
2  0.0  0.0  0.0  2  8
3  0.0  0.0  0.0  7  4
4  0.0  0.0  0.0  4  9
5  0.0  0.0  0.0  1  9
6  0.0  0.0  0.0  7  7
7  0.0  0.0  0.0  6  5
8  0.0  0.0  0.0  0  0
9  0.0  0.0  0.0  9  5

原文由 MaxU - stop russian terror 发布,翻译遵循 CC BY-SA 3.0 许可协议

In [15]: cols= ['one', 'two']
In [16]: df
Out[16]:
        one       two     three four   five
a -0.343241  0.453029 -0.895119  bar  False
b       NaN       NaN       NaN  NaN    NaN
c  0.839174  0.229781 -1.244124  bar   True
d       NaN       NaN       NaN  NaN    NaN
e  1.300641 -1.797828  0.495313  bar   True
f -0.182505 -1.527464  0.712738  bar  False
g       NaN       NaN       NaN  NaN    NaN
h  0.626568 -0.971003  1.192831  bar   True

In [17]: df[cols]=df[cols].fillna(0)

In [18]: df
Out[18]:
        one       two     three four   five
a -0.343241  0.453029 -0.895119  bar  False
b  0.000000  0.000000       NaN  NaN    NaN
c  0.839174  0.229781 -1.244124  bar   True
d  0.000000  0.000000       NaN  NaN    NaN
e  1.300641 -1.797828  0.495313  bar   True
f -0.182505 -1.527464  0.712738  bar  False
g  0.000000  0.000000       NaN  NaN    NaN
h  0.626568 -0.971003  1.192831  bar   True

原文由 yaizer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题