python - 为什么 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
从数据库填充后,我进行了各种分析计算,尝试使用loc
as 访问数据,例如,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
应该在索引中而不是给出列名。
我无法在一个独立的示例中重现这一点,因为我无法理解的原因,结果似乎取决于框架中的数据而不是框架的结构。(相同的结构在三种情况中的两种情况下“有效”。)所以具体的问题:
- 为什么或在什么情况下语法
loc['Joe', 'c1']
会导致c1
被视为键的一部分而不是列名?(无论我可能有什么其他错误,我看不到这里的第二个参数应该在任何记录的场景下被解释为键的一部分,例如我没有类似的东西loc[('Joe','c1')]
。) - 是否存在已知或记录在案的情况,其中框架中的数据可能会导致数据访问调用的解释方式发生这种变化?
解决方案
推荐阅读
- python - 找出 Selenium 中的页面 url (javascript:void(0);)
- sql - 实现包含所有效果的 SQL 查询问题
- php - 为什么总是“为 foreach 提供的参数无效”
- objective-c - 在Objective C中使用NSURLConnection解析json时获取服务器错误消息
- wordpress - 想在worpress中修剪中文字
- vba - 使用 VBA 验证多个单元格数据
- c++ - Reading data from .txt file and saving into multiple vectors using c++
- php - 将数据表单视图传递给控制器 guzzle Laravel 5
- windows - 用于从网络驱动器中删除文件的批处理文件命令
- jquery - 将禁用属性添加到无法在开发人员选项中修改的选择框