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()
如果您尝试继续使用数据帧,则会丢失数据。无论如何,这可能不是查找数据框中丢失的标识符的最佳方法。
我正在尝试 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()
如果您尝试继续使用数据帧,则会丢失数据。无论如何,这可能不是查找数据框中丢失的标识符的最佳方法。