Pandas: 写入原始数据框时的 SettingWithCopyWarning
我明白链式赋值的概念,也知道当我看到这个警告时:
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)