熊猫fillna()在DataFrame切片上不起作用

时间:2019-04-13 10:35:25

标签: python pandas dataframe fillna

熊猫fillna在DataFrame切片上不起作用,这是一个示例

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                [3, 4, np.nan, 1],
                [np.nan, np.nan, np.nan, 5],
                [np.nan, 3, np.nan, 4]],
                columns=list('ABCD'))
df[["A", 'B']].fillna(0, inplace=True)

DataFrame不变

    A   B   C   D
0   NaN 2.0 NaN 0
1   3.0 4.0 NaN 1
2   NaN NaN NaN 5
3   NaN 3.0 NaN 4

相反

df["A"].fillna(0, inplace=True)

df.fillna(0, inplace=True)

做得很好。

这是bug还是按预期运行? 提前谢谢。

P.S。 this问题询问如何在切片上使用fillna,至于我的问题,则涉及为什么无效。 答案在@ heena-bawa答案评论部分。

3 个答案:

答案 0 :(得分:0)

如果我们查看pandas documentation,则表示应该在切片上fillna使用以下内容:

values = {'A':0, 'B':0}
df.fillna(value=values, inplace=True)

print(df)

     A    B   C  D
0  0.0  2.0 NaN  0
1  3.0  4.0 NaN  1
2  0.0  0.0 NaN  5
3  0.0  3.0 NaN  4

答案 1 :(得分:0)

您可以使用:

df[['A','B']] = df[['A','B']].fillna(0)

     A    B   C  D
0  0.0  2.0 NaN  0
1  3.0  4.0 NaN  1
2  0.0  0.0 NaN  5
3  0.0  3.0 NaN  4

答案 2 :(得分:0)

我认为它像预期的那样工作。如果我尝试您的代码,则会引发警告:

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

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  downcast=downcast, **kwargs)

含义:通过以这种方式选择列,您将生成一个副本,因此就地参数不会起作用。