繁体   English   中英

使用loc命令替换值

[英]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)

replace docs中

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM