如何将Excel多行表头数据转换为标准pandas DataFrame格式
Pandas转换多行表头Excel为标准DataFrame实现方法
核心实现代码
替换代码里的文件路径即可直接运行:
import pandas as pd # 1. 读取Excel,指定前2行作为多级表头,若表头前有其他无关行,加skiprows=行数跳过 df = pd.read_excel("你的原始数据文件.xlsx", header=[0, 1]) # 2. 补全合并单元格导致的一级表头空值(合并单元格读入后仅首个单元格有值,其余为NaN) col_level0 = df.columns.get_level_values(0).to_series().ffill().values col_level1 = df.columns.get_level_values(1).values # 3. 拼接生成规范单级列名,可根据自己的分组规则调整前缀逻辑 final_columns = [] for group_name, col_name in zip(col_level0, col_level1): # 基础信息、备注这类无歧义的列直接用子列名,其他分组列加分组前缀避免重名 if group_name in ["基础信息", "备注"]: final_columns.append(col_name) else: final_columns.append(f"{group_name}_{col_name}") # 4. 替换列名,清理全空的无效行 df.columns = final_columns df = df.dropna(how="all").reset_index(drop=True)
关键参数说明
header=[0,1]:指定Excel中第0、1行(对应Excel界面显示的第1、2行)作为多级表头,若你的数据是3行复合表头,传入[0,1,2]即可,以此类推ffill():向前填充空值,适配Excel合并单元格的读取规律——合并单元格读入pandas后,仅区域第一个单元格保留值,其余位置为空值,向前填充可以自动补全同组的一级表头名- 列名拼接逻辑可按需自定义:如果不需要分组前缀,直接把
final_columns赋值为col_level1即可;如果需要其他分隔符,把下划线替换成需要的符号就行
如果读取后出现列名错位,先检查Excel是否存在隐藏列、表头前的空行/标题行,调整
skiprows参数(值为需要跳过的前置行数)和header的行索引即可,注意pandas读取时的行计数从0开始。
内容的提问来源于stack exchange,提问作者Kush
相关产品推荐
相关产品推荐

