我有一个给出初始结构的数据框:
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
的内容。)