pandas DataFrame KeyError: get list of missing keys

pandas DataFrame KeyError: get list of missing keys

我正在尝试 select 从数据框 df 匹配键列表 IDs 的行。

df.loc[IDs]

在极少数情况下,它们的键不包含在 DataFrame 中并抛出 KeyError:

KeyError: "None of [['001U000001c6OczIAE' '001U000000fgVR9IAM' '0015800000ecNcjAAE'\n '001U000000fgVRDIA2']] are in the [index]"

我可以轻松地从该异常中找到丢失的键列表吗?不通过异常处理来做到这一点会是 better/cleaner/more pythonic 吗?

如果没有更多信息,您可能忘记了一个步骤 - 您是否将索引设置为 Salesforce ID(假设它是什么)?

例如(随机数据):

df
    a account
0   1     abc
1   3     abc
2   5     abc
3   7     def
4   7     def
5  34      gf
6   3      hj
7  24      hj

lis = ['abc', 'hj']
df.loc[lis]
KeyError: "None of [['abc', 'hj']] are in the [index]"

对于 0.21.0 之前的 pandas 版本

设置索引后:

df.set_index('account').loc[lis]
          a
account    
abc       1
abc       3
abc       5
hj        3
hj       24

缺失值不应该引发错误,而是 np.nan 值:

lis = ['abc', 'hj', 'j']
df.set_index('account').loc[lis]
            a
account      
abc       1.0
abc       3.0
abc       5.0
hj        3.0
hj       24.0
j         NaN

对于 pandas 版本 0.21.0+

您需要改为使用数据框方法 reindex()。然而,使用重新索引,您将无法在索引中有重复项(因此我上面的示例在没有一些重复数据删除的情况下将无法工作):

df.set_index('account')\
.groupby(level=0).first()\  # de-duplicate index here
.reindex(lis2)

           a
account     
abc      1.0
hj       3.0
j        NaN

不幸的是,在删除重复数据后使用 reindex() 如果您尝试继续使用数据帧,则会丢失数据。无论如何,这可能不是查找数据框中丢失的标识符的最佳方法。