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

如何用Pandas读取表头分散在多行的多级表头Excel文件?

解决Pandas多级表头合并与扁平化问题

针对你提到的Excel多级表头(前3行,部分表头仅存在于第3行)的处理需求,以下是完整的解决方案,能自动将多级表头合并为你需要的扁平化格式:

完整代码实现

import pandas as pd

# 读取Excel文件,先不指定表头
df = pd.read_excel('test_3.xlsx', sheet_name='WEEK - 2023', header=None)

# 提取前3行作为表头,横向填充空值(处理跨行的表头)
header_rows = df.iloc[:3, :].fillna(method='ffill', axis=1)

# 创建多级表头
multi_cols = pd.MultiIndex.from_arrays(header_rows.values)
df.columns = multi_cols

# 移除表头行,保留数据部分
df = df.iloc[3:, :].reset_index(drop=True)

# 定义函数:将多级表头的每一层拼接为扁平化列名
def flatten_col_name(col):
    # 过滤空值,转为小写后用下划线连接
    parts = [str(part).strip() for part in col if pd.notna(part)]
    return '_'.join(parts).lower()

# 应用函数,重命名所有列
df.columns = [flatten_col_name(col) for col in df.columns]

# 可选:调整数据类型,确保字段格式正确
df['month'] = df['month'].astype(str)
df['week'] = df['week'].astype(int)

print(df)

代码说明

  • 表头填充:用fillna(method='ffill', axis=1)横向填充空值,让跨行的表头(如PLAN 2023)自动覆盖其下方所有关联列,避免表头缺失。
  • 多级表头转扁平化:通过自定义函数flatten_col_name,将每一列的多级表头拼接为小写、下划线分隔的格式,完美匹配你需要的plan_2023_traffic_per_channel_all样式。
  • 数据清理:移除表头行后重置索引,同时可按需调整字段的数据类型,保证后续分析的准确性。

示例数据的输出结果

运行代码后,你的示例数据会生成如下格式的DataFrame:

monthweekplan_2023_traffic_per_channel_allplan_2023_traffic_per_channel_redplan_2023_traffic_per_channel_greenplan_2023_traffic_per_channel_orangeplan_2023_traffic_share_per_channel_redplan_2023_traffic_share_per_channel_greenplan_2023_traffic_share_per_channel_orange
jan110050302050%30%20%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:07:37