有一个数据框,我需要replace
值高于 512 时为 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]
Result:
Age 35
Fare 512.329
因此,尽管有上述代码,票价并未更改为 263。
去除inplace = True
option.
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)
来自替换文档 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html:
inplace : bool, 默认 False
如果为真,则到位。注意:这将修改该对象的任何其他视图(例如 DataFrame 中的列)。如果为 True,则返回调用者。
到目前为止,您正在就地修改数据框,但是赋值运算符=
返回调用者,因此您正在使用原始值重写您的编辑。
EDIT
实际上在我的版本(pandas 0.24.0)中inplace = True
它不返回任何内容,因此上面的粗体句子可能与版本相关(文档指的是 pandas 0.24.2)。
作为旁注,过滤数据.loc
然后使用replace
是多余的:.replace({512:263})
仅转换值 512,无需在之前选择该值.loc
.
如果你这样做:
df['Fare'].astype(int).replace({512:263}, inplace=True)
你会得到相同的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)