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

使用Pandas读取Excel:将多行合并为列标题(数据始于第7行)

解决Pandas读取Excel时多行列名合并问题

核心思路

你的列名分散在多行,直接用header或skiprows只能指定单行列名,需要先读取包含列名行的全表,手动合并多行内容作为列名,再提取实际数据。

具体代码实现

import pandas as pd
from collections import defaultdict

# 1. 读取整个Excel文件,不指定表头,所有行都作为数据加载
df_raw = pd.read_excel("sample.xlsx", header=None)

# 2. 定义列名所在的行索引(替换成你实际的列名行,比如列名在Excel的第1-6行,对应索引0-5)
header_row_indices = [0, 1, 2, 3, 4, 5]

# 3. 合并每一列的多行表头内容,自动忽略空值
new_columns = []
for col_idx in df_raw.columns:
    # 提取当前列的所有表头行内容,过滤空值后拼接
    header_parts = [
        str(part).strip() 
        for part in df_raw.loc[header_row_indices, col_idx] 
        if pd.notna(part) and str(part).strip() != ""
    ]
    new_columns.append(" ".join(header_parts))

# 4. 提取实际数据行(从第7行开始,对应索引6)
df = df_raw.loc[6:, :].copy()

# 5. 处理可能的重复列名,添加后缀区分
col_counter = defaultdict(int)
final_columns = []
for col_name in new_columns:
    col_counter[col_name] += 1
    if col_counter[col_name] > 1:
        final_columns.append(f"{col_name}_{col_counter[col_name]}")
    else:
        final_columns.append(col_name)

# 6. 设置最终列名并重置索引
df.columns = final_columns
df = df.reset_index(drop=True)

代码说明

  • 步骤2的header_row_indices需要根据你的实际Excel调整:比如列名在Excel的第4-6行(界面显示的行号),对应pandas的索引是3、4、5,就把列表改成[3,4,5]。
  • 合并表头时自动过滤空值,避免拼接无效空字符串。
  • 步骤5处理重复列名,防止后续数据操作因列名重复报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:55:09