Multi-index DataFrame未使用.loc访问时出现间歇性KeyError问题咨询
问题原因解析
1. my_df0[1]报KeyError的原因
DataFrame直接使用[]做索引时,默认优先匹配列索引的值,你已经确认数据中没有名为1的列,因此触发KeyError是符合pandas设计逻辑的正常现象。
2. my_df0.loc[1]结果不稳定的核心原因
.loc索引对多层行索引的默认匹配规则是:仅传入单个值时,优先匹配第一级行索引的取值,出现时好时坏的情况,基本是以下几种场景导致的:
- 你的数据在操作过程中第一级行索引的取值发生了变化:当第一级索引中存在值为
1的项时,.loc[1]可以正常返回结果,当该索引值被删除、重置或者修改后,调用就会抛出KeyError - 索引层级和取值混淆:从你贴出的样例数据来看,
level_1是第一级行索引的层级名,你实际的第一级行索引现有取值为0,如果你要查询的是第二级行索引等于1的内容,直接写.loc[1]本身就是错误写法,只有刚好第一级存在1的时候才会误打误撞返回结果 - 整数索引隐式变更:如果你的行索引是整数类型,在做切片、合并、筛选等操作后,很容易出现索引被重置、重新排序的情况,也会导致原本存在的索引值丢失。
稳定访问的建议
如果需要固定匹配某一级索引的取值,不要用单参数的.loc写法,明确指定匹配的层级即可避免不稳定问题:
# 示例:匹配第二级行索引等于1的所有数据 my_df0.loc[my_df0.index.get_level_values(1) == 1]
内容的提问来源于stack exchange,提问作者DNburtonguster
相关产品推荐
相关产品推荐

