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

如何从Multi-index DataFrame的索引中提取单列?

从Pandas多级索引DataFrame中提取索引列的简单方法

问题场景

当DataFrame设置多级索引(MultiIndex)后,直接用df['col_name']或df.col_name提取索引列会触发KeyError——因为这些索引不属于DataFrame的普通列。下面介绍几种无需重置索引的直接提取方法。

解决方案

方法1:使用index.get_level_values()(推荐)

这是Pandas官方推荐的提取多级索引列的方法,支持通过索引名称或位置(从0开始计数)指定目标:

# 通过索引名称提取
sepal_length_col = df.index.get_level_values('sepal_length')

# 通过索引位置提取(sepal_length是第一个索引,位置为0)
sepal_length_col = df.index.get_level_values(0)

提取结果为Series对象,格式与普通列一致,可直接用于后续操作。

方法2:将索引转为DataFrame后提取

先把多级索引转换为普通DataFrame,再提取目标列,适合需要同时查看多个索引列的场景:

# 索引转DataFrame后提取列
sepal_length_col = df.index.to_frame()['sepal_length']

方法3:重置索引后提取(兼容普通列操作)

如果需要将索引列转为普通列进行后续处理,可以使用你已经想到的reset_index():

# 重置索引,将索引列转为普通列后提取
sepal_length_col = df.reset_index()['sepal_length']

代码验证示例

结合你的测试代码,完整验证如下:

import pandas as pd

file_name = "https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv"
df = pd.read_csv(file_name)
df = df.set_index(['sepal_length','sepal_width'])

# 使用get_level_values提取索引列
print(df.index.get_level_values('sepal_length').head())
# 输出:
# Float64Index([5.1, 4.9, 4.7, 4.6, 5.0], dtype='float64', name='sepal_length')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:35:04