为什么pandas`loc`抛出带有列名的KeyError`?

时间:2019-11-25 19:41:59

标签: python pandas

我有一个给出初始结构的数据框:

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

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

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

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

我已经运行了三次,用不同的日期范围填充框架。这三项工作中的两项如预期和上述。第三,我得到KeyError: ('Joe', 'c1')的{​​{1}},但是即使在这种“断”的情况下,我也得到df_data.loc['Joe', 'c1']的完美结果,我认为应该在此给出相同的答案案件。我还可以打印整个帧df_data.loc['Joe'].c1,并获得完美的效果。我在这里将df_data解释为意味着Pandas认为KeyError应该在索引中,而不是给出列名。

由于无法理解的原因,我无法在一个独立的示例中重现它,结果似乎取决于帧中的数据,而不是帧的结构。 (对于三种情况中的两种情况,相同的结构“有效”。)因此,提出了一些具体问题:

  • 为什么c1语法会导致loc['Joe', 'c1']被当作键的一部分而不是列名来对待? (无论我可能遇到什么其他错误,在任何有记录的情况下,我都不知道此处的第二个参数在哪里应解释为键的一部分,例如,我有类似c1的内容。)
  • 是否存在已知或有记载的案例,其中有关框架中数据的某些内容可能导致数据访问调用的解释方式发生这种变化?

0 个答案:

没有答案