有人可以解释为什么在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]
答案 0 :(得分:21)
此处建议使用.loc
,因为方法df.Age.isnull()
,df.Gender == i
和df.Pclass == j+1
可能会返回数据框切片的视图,也可能会返回副本。这可能会混淆熊猫。
如果您不使用.loc
,则最终会串联调用所有3个条件,这会导致出现一个名为链式索引的问题。当您使用.loc
时,您只需一步即可访问所有条件,并且不再混淆熊猫。
您可以阅读有关此内容的更多信息以及一些不使用.loc
的示例,这些示例会导致pandas documentation中的操作失败。
简单的答案是,虽然你可以经常逃避不使用.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]
。
有关详细信息,请参阅Indexing and Selecting Data上的pandas文档。