You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

处理后的数据结构如下:

AnimalCaptiveWild
Falcon390.0350.0
Parrot30.020.0

之后可以直接使用列名做任意计算,不会再出现索引找不到的问题。


内容的提问来源于stack exchange,提问作者Andrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:54:05