[英]Replace values using loc command
有一个数据框,我需要将512以上的值replace
为263。
因此,我首先使用以下代码行来过滤索引:
df.loc[df['Fare']>512]['Fare'].astype(int)
结果如下:
258 512
679 512
737 512
1234 512
Name: Fare, dtype: int64
看起来不错! 因为它用512以上的值过滤了所有4行。现在我需要将此值替换为263:
df.loc[df['Fare']>512]['Fare']=df.loc[df['Fare']>512]['Fare'].astype(int).replace({512:263},inplace=True)
但这并没有改变我的数据框。 例如,当我搜索索引737时,我发现了这一点:
df.iloc[737]
结果:
Age 35
Fare 512.329
因此,尽管有上述代码,票价仍未更改为263。
使用.loc
您要使用[row, col]
而不是[row][col]
。
尝试:
df.loc[df['Fare']>512, 'Fare']=df.loc[df['Fare']>512, 'Fare'].astype(int).replace({512:263},inplace=True)
有什么原因使您不只是在做
condition = df['Fare'].astype(int) > 512
df.loc[condition, 'Fare'] = 263
condition
是布尔序列, .loc
将仅将该序列中的行赋值为True
到所需值。
删除inplace = True
选项。
df.loc[df['Fare']>512]['Fare']=df.loc[df['Fare']>512]['Fare'].astype(int).replace({512:263})
或干脆不挑衅。
df.loc[df['Fare']>512]['Fare'].astype(int).replace({512:263}, inplace=True)
inplace:bool,默认为False
如果为True,则到位。 注意:这将修改此对象上的任何其他视图(例如,DataFrame中的列)。 如果为True,则返回调用方。
现在,您正在就地修改数据框,但是赋值运算符=
返回调用者,因此您将用原始值重写您的编辑。
实际上,在我的inplace inplace = True
版本(pandas 0.24.0)中,它不会返回任何内容,因此上面的粗体字可能与版本有关(文档引用了pandas 0.24.2)。
附带说明一下,使用.loc
过滤数据然后使用replace
是多余的: .replace({512:263})
将仅转换值512,而无需在使用.loc
之前选择该值。
如果您这样做:
df['Fare'].astype(int).replace({512:263}, inplace=True)
您得到相同的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.