有一个数据框,我需要使用263将replace
的值设置为大于512。
因此,我使用此代码行首先过滤了我的索引:
df.loc[df['Fare']>512]['Fare'].astype(int)
这是结果:
258 512
679 512
737 512
1234 512
Name: Fare, dtype: int64
这看起来不错!因为它过滤了所有4行,其值大于512。 现在,我需要将此值替换为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。
答案 0 :(得分:2)
使用 fun getDataForUser(newUser: String?): LiveData<UserDataResult> {
if (newUser == null) {
return MutableLiveData<UserDataResult>().apply { value = null }
}
return userOnlineDataSource.getOnlineTime(newUser)
.combineAndCompute(userCheckinsDataSource.getCheckins(newUser)) {
a,b-> UserDataSuccess(a, b)
}
}
时,您要使用.loc
而不是[row, col]
。
尝试:
[row][col]
答案 1 :(得分:2)
你有什么理由不只是做
condition = df['Fare'].astype(int) > 512
df.loc[condition, 'Fare'] = 263
condition
是一个布尔序列,.loc
只会将该序列中值为True
的行分配给您所需的值。
答案 2 :(得分:2)
删除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 = True
版本(pandas 0.24.0)中,它不会返回任何内容,因此上述粗体字可能与版本有关(文档指的是pandas 0.24.2)。
请注意,使用.loc
过滤数据然后使用replace
是多余的:.replace({512:263})
仅转换值512,而无需在使用{{1之前选择该值}}。
如果您这样做:
.loc
您得到相同的结果。