有人能解释一下为什么在python的pandas中使用loc函数吗?请举例如下所示:
for i in range(0, 2): for j in range(0, 3): df.loc[(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1), 'AgeFill'] = median_ages[i,j]
回答:
这里推荐使用.loc
,因为df.Age.isnull()
、df.Gender == i
和df.Pclass == j+1
这些方法可能会返回数据框的视图或副本,这可能会使pandas感到困惑。
如果不使用.loc
,你将连续调用这三个条件,这会导致一个称为链式索引的问题。然而,当你使用.loc
时,你可以一步访问所有条件,pandas就不会再感到困惑了。
你可以在pandas文档中阅读更多关于此内容以及一些不使用.loc
时操作会失败的示例。
简单的回答是,虽然你经常可以不使用.loc
而直接输入(例如)
df['Age_fill'][(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1)] \ = median_ages[i,j]
但你总是会得到SettingWithCopy
警告,并且你的代码会因此变得稍微混乱一些。
根据我的经验,.loc
花了我一段时间才理解,并且更新我的代码有点烦人。但它真的非常简单且直观:df.loc[row_index,col_indexer]
。
欲了解更多信息,请参阅pandas文档中的索引和选择数据部分。