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

遍历多层表头pandas DataFrame时,如何按列名直接获取行值?

解决多层表头DataFrame遍历行取值的冗余输出问题

当使用pandas的多层表头(MultiIndex列)DataFrame时,通过iterrows()遍历行并仅指定上层列名取值,会返回包含下层表头信息的Series对象,输出带有冗余内容。示例如下:

import pandas as pd

# 创建多层表头DataFrame
df = pd.DataFrame(columns=[['header1_column1', 'header1_column2'],
                           ['header2_column1', 'header2_column2']])
df['header1_column1'] = range(2)
df['header1_column2'] = range(2)

# 遍历行取值,输出冗余内容
for index, row in df.iterrows():
    print(row['header1_column1'])

输出:

header2_column1    0
Name: 0, dtype: int64
header2_column1    1
Name: 1, dtype: int64

我们需要消除这些冗余,得到和单层表头场景一致的简洁输出(仅打印数值),以下是几种可行方案:

方法1:指定完整的多层列名元组

多层表头的列属于MultiIndex类型,每个列对应一个包含各层级名称的元组。直接使用完整元组取值,即可拿到单个标量值:

for index, row in df.iterrows():
    print(row[('header1_column1', 'header2_column1')])

输出:

0
1

方法2:从返回的Series中提取标量值

仅指定上层列名时,返回的是单元素Series,可通过.iloc[0]或.values[0]提取其中的标量值:

for index, row in df.iterrows():
    # 方式1:使用iloc[0]
    print(row['header1_column1'].iloc[0])
    # 方式2:使用values[0]
    # print(row['header1_column1'].values[0])

输出:

0
1

方法3:扁平化多层表头

如果后续不需要保留多层表头结构,可提前将各层级名称合并为单层表头,之后即可按普通单层表头的方式操作:

# 将多层表头用下划线连接,转为单层表头
df.columns = df.columns.map('_'.join)

# 使用合并后的列名取值
for index, row in df.iterrows():
    print(row['header1_column1_header2_column1'])

输出:

0
1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:01:02