Pandas fillna()无法处理DataFrame切片[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas fillna()无法处理DataFrame切片[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

Pandas 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)

工作得很好。

这是一个错误还是按预期工作? Thx提前。

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

答案

您可以使用:

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
另一答案

如果我们看看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
另一答案

我觉得它的作用与预期的一样。如果我尝试你的代码,它会抛出一个警告:

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)

含义:通过以这种方式选择列,您将生成副本,因此inplace参数不会产生影响。

以上是关于Pandas fillna()无法处理DataFrame切片[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pandas中如何对指定列做fillna

Pandas fillna('Missing')

pandas.DataFrame.fillna - TypeError:只有整数标量数组可以转换为标量索引

Fillna 一次使用多种方法 - pandas

Pandas - fillna 与特定类别的平均值

使用 fillna 在 Pandas 中使用列表填充空值