我了解链式分配背后的想法,并且当我收到警告时
Pandas: SettingWithCopyWarning
是为了让我知道我正在写入副本,而不是原始数据帧。
但是我似乎无法成功实现.loc或.ix()或.iloc(),因此我实际上是在写原始数据帧。
在“大小”列不为空的情况下,我想将该值设置为空。我试过了:
import numpy as np
df.loc[df['size'].notnull()].value=np.nan
我也尝试过使用replace函数,但无济于事(要替换的值都为零,因此.replace(0,np.nan)的实现也可以工作)。
以下答案适用于原始问题(在OP对其进行编辑之前)。有问题的代码行是:
df.loc[df['size'].notnull() & df['value'] == 0].value = np.nan
我建议改用此方法(在[]中移动值):
df.loc[df['size'].notnull() & df['value'] == 0, 'value'] = np.nan
编辑:
这假设列名是“值”,并且您没有尝试设置values属性(如上面的注释中所述,您不能这样做)
因此,这将适用于以下数据框,例如:
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句