Pandas fillna() 无法处理 DataFrame 切片
Pandas fillna() not working on DataFrame slices
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)
工作正常。
这是一个错误还是它按预期工作?
提前致谢。
P.S。 问题问 how to use fillna
on a slice,至于我的问题,它涉及 why 以上工作。
答案在@heena-bawa的回答评论区。
如果我们查看 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
您可以使用:
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
我认为它按预期工作。如果我尝试你的代码,它会抛出警告:
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 切片,这里是一个例子
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)
工作正常。
这是一个错误还是它按预期工作? 提前致谢。
P.S。 fillna
on a slice,至于我的问题,它涉及 why 以上工作。
答案在@heena-bawa的回答评论区。
如果我们查看 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
您可以使用:
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
我认为它按预期工作。如果我尝试你的代码,它会抛出警告:
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 不会产生影响。