Python(Pandas)错误'标签[阿尔及利亚]不在[索引]'

时间:2017-01-02 13:51:03

标签: python pandas indexing assign

我不明白为什么会这样做

df[(df['Gold']>0) & (df['Gold.1']>0)].loc[((df['Gold'] - df['Gold.1'])/(df['Gold'])).abs().idxmax()]

但是当我除以(df['Gold'] + df['Gold.1'] + df['Gold.2'])时 它停止工作给我错误,你可以在下面找到。

有趣的是,以下行可以使用

df.loc[((df['Gold'] - df['Gold.1'])/(df['Gold'] + df['Gold.1'] + df['Gold.2'])).abs().idxmax()]

自从我开始学习Python和Pandas以来,我不明白发生了什么。我需要了解发生这种情况的原因以及解决方法。

ERROR

  

KeyError:'标签[Algeria]不在[index]'

DataFrame snap enter image description here

1 个答案:

答案 0 :(得分:6)

您的问题是boolean indexing

df[(df['Gold']>0) & (df['Gold.1']>0)]

返回一个过滤后的DataFrame,该数据框不包含您使用此计算的index maxSeries

((df['Gold'] - df['Gold.1'])/(df['Gold'] + df['Gold.1'] + df['Gold.2'])).abs().idxmax()

在您的数据中,它是Algeria

所以loc逻辑上会抛出KeyError

一种可能的解决方案是将新过滤的DataFrame分配给df1,然后使用Series获取与idxmax的最大值对应的索引:

df1 = df[(df['Gold']>0) & (df['Gold.1']>0)]
df2 = df1.loc[((df1['Gold']-df1['Gold.1'])/(df1['Gold']+df1['Gold.1']+df1['Gold.2'])).abs().idxmax()]