在Pandas DataFrame的多个列上使用fillna方法失败

时间:2017-04-27 03:28:18

标签: python pandas na

为什么这个操作会失败? 例如:

a = pd.DataFrame({'a': [1,2,np.nan, np.nan],
                 'b': [5,np.nan,6, np.nan],
                 'c': [5, 1, 5, 2]})


a[['a', 'b']].fillna(0, inplace=True)

并给了我这个警告:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

a仍然像以前一样填充NA s。但是,如果我分别在每个列上调用.fillna(),则没有问题。如何在一次拍摄中在多列上填充NA值?

2 个答案:

答案 0 :(得分:5)

选项1

a.loc[:, ['a', 'b']] = a[['a', 'b']].fillna(0)

print(a)

     a    b  c
0  1.0  5.0  5
1  2.0  0.0  1
2  0.0  6.0  5
3  0.0  0.0  2

选项2

a.update(a[['a', 'b']].fillna(0))

print(a)

     a    b  c
0  1.0  5.0  5
1  2.0  0.0  1
2  0.0  6.0  5
3  0.0  0.0  2

选项3

for col in ['a', 'b']:
    a[col].fillna(0, inplace=True)

print(a)

     a    b  c
0  1.0  5.0  5
1  2.0  0.0  1
2  0.0  6.0  5
3  0.0  0.0  2

选项4

a.fillna(a[['a', 'b']].fillna(0), inplace=True)

print(a)

     a    b  c
0  1.0  5.0  5
1  2.0  0.0  1
2  0.0  6.0  5
3  0.0  0.0  2

答案 1 :(得分:3)

编辑:正如@piRSquared指出的那样,第一个解决方案应该是

a.loc[:, ['a', 'b']] = a[['a', 'b']].fillna(0)

在所选列中填充

a.fillna(0, inplace = True)

填写所有栏目