pandas如何将层级列索引转换为普通列?解决列访问报属性不存在错误
报错原因
你执行unstack操作后得到的是**多级列索引(MultiIndex)**结构,当前列的第一层是Max Speed,第二层才是Captive和Wild,因此直接使用df.Captive属性访问找不到对应列,才会抛出该错误。
解决方案
方案1:仅临时计算比值,不修改表结构
直接按照多级索引的访问规则取值计算即可,写法如下:
ratio = df['Max Speed']['Captive'] / df['Max Speed']['Wild']
方案2:把多级列索引转为普通单级列,支持直接属性访问
如果你想要保留当前的行索引结构,仅调整列索引,可以删除第一层冗余的Max Speed列索引:
# 删掉第一层列索引,仅保留Captive、Wild作为列名 df.columns = df.columns.droplevel(0) # 之后就可以直接用你原本的写法计算 ratio = df.Captive / df.Wild
方案3:把所有索引(行+列)都转为普通列,得到平铺表
如果后续需要做更复杂的计算,也可以把行索引Animal也转为普通列,得到完全平铺的表结构:
# 先删掉第一层列索引 df.columns = df.columns.droplevel(0) # 把行索引转为普通列 df = df.reset_index()
处理后的数据结构如下:
| Animal | Captive | Wild |
|---|---|---|
| Falcon | 390.0 | 350.0 |
| Parrot | 30.0 | 20.0 |
之后可以直接使用列名做任意计算,不会再出现索引找不到的问题。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

