Pandas导入双层表头.xlsx时跳过2行后表头读取异常问题
Pandas读取双层表头Excel文件时表头识别异常的原因
问题现象
使用Pandas导入带双层表头的.xlsx文件时,设置skiprows=[0,1]跳过前2行,第一层表头无法正确识别:仅对应列的第一列被分配header1、header2,其余列显示为Unnamed;但设置skiprows=[0]仅跳过1行时,双层表头能正常读取。
测试代码
import pandas as pd # Python 3.12.7 # pandas 2.2.2 # openpyxl 3.1.5 df = pd.read_excel('2_rows_to_skip.xlsx', skiprows=[0,1], header=[0,1]) df2 = pd.read_excel('1_row_to_skip.xlsx', skiprows=[0], header=[0,1]) for col in df.columns: print(col) print('-------------------') for col in df2.columns: print(col)
输出结果
('header1', 'A') ('Unnamed: 1_level_0', 'B') ('Unnamed: 2_level_0', 'C') ('header2', 'A') ('Unnamed: 4_level_0', 'B') ('Unnamed: 5_level_0', 'C') ------------------- ('header1', 'A') ('header1', 'B') ('header1', 'C') ('header2', 'A') ('header2', 'B') ('header2', 'C')
原因分析
核心问题出在Excel文件的合并单元格处理逻辑:
- 双层表头的第一层单元格是跨列合并状态(比如
header1合并了A、B、C三列的表头行,header2合并了对应下一组的三列)。 - 当设置
skiprows=[0,1]时,Pandas跳过了包含合并单元格信息的前两行,直接从第3行读取表头。此时合并单元格的跨列关联信息已丢失,Pandas只会读取每个单元格的实际值,未被填充的合并单元格区域会被识别为空值,最终显示为Unnamed前缀的名称。 - 而设置
skiprows=[0]时,仅跳过无关行,保留了包含合并单元格结构的表头行,Pandas能正确解析合并单元格对应的跨列归属,因此双层表头可以正常识别。
内容的提问来源于stack exchange,提问作者ZetDen
相关产品推荐
相关产品推荐

