1

我理解链式分配背后的想法,当我收到警告时

Pandas: SettingWithCopyWarning

这是为了让我知道我正在写入副本,而不是原始数据框。

但我似乎无法成功实现 .loc 或 .ix() 或 .iloc() ,因此我实际上是在写入原始数据帧。

如果“大小”列不为空,我想将值设置为空。我试过了:

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

我也尝试过使用替换功能,但无济于事(要替换的值全为零,因此 .replace(0, np.nan) 的实现也可以工作)。

4

1 回答 1

2

以下答案适用于原始问题(在由 OP 编辑​​之前)。有问题的代码行是:

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

我建议改用这个(在[]内移动值):

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

编辑:

这假设列名是“值”并且您没有尝试设置值属性(如上面的评论中所述,您不能这样做)

因此,这将适用于以下数据框,例如:

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)
于 2014-10-28T19:44:50.500 回答