首页 > 解决方案 > 为什么 pandas `loc` 会抛出带有列名的 `KeyError`?

问题描述

我有一个数据框,它被赋予了这个初始构造:

df_data = pd.DataFrame(columns=['name','date','c1','c2']).set_index(['name','date'])

然后我有代码从数据库中填充这个框架。我可以打印部分或全部框架并获得合理的结果。就像是:

print df_data.c1.head(3)

name date
Joe  2019-01-01 234324
     2019-01-02 4565
     2019-01-03 573
Name: c1, dtype: object

从数据库填充后,我进行了各种分析计算,尝试使用locas 访问数据,例如,df_data.loc['Joe', 'c1'] 我希望从索引的日期和列的值中获得结果c1,其中“名称”部分多索引的已被选择为“乔”。就像是:

print df_data.loc['Joe', 'c1']

date
2019-01-01 234324
2019-01-02 4565
2019-01-03 573
Name: c1, type: object

我已经运行了 3 次,用不同的日期范围填充框架。这三个工作中的两个按预期和上面描述的那样工作。在第三个中,我得到KeyError: ('Joe', 'c1')了,df_data.loc['Joe', 'c1']但即使在这种“破碎”的情况下,我也得到了一个非常好的结果df_data.loc['Joe'].c1,我认为在这种情况下应该给出相同的答案。我还可以打印整个框架df_data并获得完全合理的结果。我将KeyError这里解释为 Pandas 认为c1应该在索引中而不是给出列名。

我无法在一个独立的示例中重现这一点,因为我无法理解的原因,结果似乎取决于框架中的数据而不是框架的结构。(相同的结构在三种情况中的两种情况下“有效”。)所以具体的问题:

标签: pythonpandas

解决方案


推荐阅读