Pandas: 写入原始数据框时的 SettingWithCopyWarning

1 投票
1 回答
501 浏览
提问于 2025-04-30 05:44

我明白链式赋值的概念,也知道当我看到这个警告时:

Pandas: SettingWithCopyWarning

它是在提醒我,我正在修改的是一个副本,而不是原始的数据框。

但是我似乎无法成功使用 .loc、.ix() 或 .iloc(),以便真正修改原始的数据框。

在 'size' 列不为空的情况下,我想把它的值设置为 null。我试过:

import numpy as np
df.loc[df['size'].notnull()].value=np.nan

我也尝试过使用替换函数,但没有成功(要替换的值都是零,所以用 .replace(0, np.nan) 也许可以实现)。

暂无标签

1 个回答

2

下面的回答是针对最初的问题(在提问者编辑之前)。问题中的代码行是:

df.loc[df['size'].notnull() & df['value'] == 0].value = np.nan

我建议试试这个(把值放在[]里面):

df.loc[df['size'].notnull() & df['value'] == 0, 'value'] = np.nan

编辑:

这里假设列的名字是'value',而且你不是想设置值属性(正如上面的评论所说,你是不能这样做的)。

所以,这个方法可以在以下的数据框中使用,例如:

d = {'size' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
 'value' : pd.Series([1., 2., 0.], index=['a', 'b', 'd'])}

df = pd.DataFrame(d)

撰写回答