我想根据掩码中描述的某些条件将函数应用于数据框中的行子集。例如:
mask = (n.city=='No City Found')
n[mask].city = n[mask].address.apply(lambda x: find_city(x))
Run Code Online (Sandbox Code Playgroud)
当我这样做时,pandas 警告我,我正在尝试在 Dataframe 切片的副本上设置一个值。当我检查数据框时,我发现我的更改尚未保留。
如果我使用mask创建一个新的 Dataframe 切片 x并将该函数应用于 x,则应用函数的结果将正确存储在 x 中。
x = n[mask]
x.city = x.address.apply(lambda x: find_city(x))
Run Code Online (Sandbox Code Playgroud)
有没有办法将此数据映射回我的原始数据框,以便它只影响满足原始掩码中描述的条件的行?
或者是否有更简单的方法来执行这样的操作?
更新值的正确方法是使用loc
n.loc[mask, 'city'] = n[mask].address.apply(lambda x: find_city(x))
Run Code Online (Sandbox Code Playgroud)
如果您想节省变量的内存,您也可以不使用掩码来执行此操作
n['city']=n.address.apply(
lambda x: find_city(x)
if x.city == 'No City Found' else x.city, axis=1
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2835 次 |
| 最近记录: |