大熊猫中的loc函数

时间:2015-07-22 18:29:40

标签: python pandas machine-learning

有人可以解释为什么在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]

1 个答案:

答案 0 :(得分:21)

此处建议使用.loc,因为方法df.Age.isnull()df.Gender == idf.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文档。