为什么这个操作会失败? 例如:
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
值?
答案 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)
填写所有栏目