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

如何用Pandas读取含多行表头的XLS文件?遇ParserError报错

解决Pandas读取复合表头Excel文件的ParserError问题

首先得说,你用pd.read_csv()读取XLS格式的文件本身就踩坑啦!csv和xls是完全不同的文件格式,Pandas的read_csv专门处理逗号分隔的文本文件,而XLS是Excel的二进制格式,得用pd.read_excel()才对,这很可能是触发报错的核心原因之一。

接下来针对你的复合表头(第3行是一级表头,第4行是二级表头),给你几个可行的方案:

方案1:正确使用read_excel读取复合表头

直接用read_excel,注意Pandas的行索引是从0开始的——你说的第3行对应索引2,第4行对应索引3,所以指定header=[2,3]就行;如果需要跳过前面的行或者中间的行(比如你提到的第7行,对应索引6),加上skiprows参数:

import pandas as pd

# 重点:用read_excel而非read_csv
df = pd.read_excel("你的文件路径或URL", skiprows=[0,1,6], header=[2,3])

这样加载后,第3、4行会组成多级表头,比如('DATE', '')或者('BENCHMARK NAME', '1ST (PERCENT)')这类格式的列名,后续你可以用df.columns查看,或者按需重命名。

方案2:兼容文件中的不规则行(如果仍报错)

要是还是碰到Error tokenizing data,大概率是文件里有列数和表头不匹配的行(比如空行、合并单元格导致的格式混乱),可以试试这些参数兼容:

  • 添加on_bad_lines='skip':跳过列数异常的行(Pandas 1.4.0及以上版本支持)
  • 指定usecols:明确要读取的列,避开空列干扰
  • 选对引擎:XLSX文件用engine='openpyxl',旧版XLS文件用engine='xlrd'(注意xlrd 2.0+不再支持XLSX)

示例代码:

df = pd.read_excel(
    "你的文件路径或URL",
    skiprows=[0,1,6],
    header=[2,3],
    on_bad_lines='skip',
    engine='openpyxl'  # XLSX用这个,XLS换xlrd
)

方案3:手动加载表头并整理数据

如果上面的方法都不好使,还可以手动控制表头生成,灵活性更高:

# 先跳过前6行,读取所有内容(包含第3、4行的表头)
temp_df = pd.read_excel("你的文件路径或URL", skiprows=6)
# 提取前两行作为多级表头
multi_header = pd.MultiIndex.from_arrays([temp_df.iloc[0], temp_df.iloc[1]])
# 从第3行开始作为有效数据
df = temp_df.iloc[2:].copy()
# 给数据设置多级表头
df.columns = multi_header
# 重置索引
df = df.reset_index(drop=True)

最后提个醒:一定要确认你的文件是XLS还是XLSX,对应的引擎参数要选对,不然也会出现莫名其妙的报错哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:40