Pandas的dataframe的fillna()方法只能对部分列进行就地操作。

22 浏览
0 Comments

Pandas的dataframe的fillna()方法只能对部分列进行就地操作。

我正在尝试仅将某些列的空值填充为0的Pandas数据框。

当我执行:

import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df

输出为:

     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  NaN  7.0
3  NaN  6.0  8.0
     a    b    c
0  1.0  4.0  0.0
1  2.0  5.0  0.0
2  3.0  0.0  7.0
3  0.0  6.0  8.0

它用0替换了每个None。 我想做的是,仅替换ab列中的None,而不是c

最好的方法是什么?

admin 更改状态以发布 2023年5月22日
0
0 Comments

您可以使用dictfillna来为不同的列填充不同的值。

df.fillna({'a':0,'b':0})
Out[829]: 
     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

然后重新赋值回去即可。

df=df.fillna({'a':0,'b':0})
df
Out[831]: 
     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

0
0 Comments

您可以通过赋值选择所需的列:

df[['a', 'b']] = df[['a','b']].fillna(value=0)

结果输出如预期:

     a    b    c
0  1.0  4.0  NaN
1  2.0  5.0  NaN
2  3.0  0.0  7.0
3  0.0  6.0  8.0

0