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

Pandas read_excel报list index out of range错误及批量处理方案问询

报错根因

你的报错是pandas默认读取xlsx的引擎openpyxl读取样式表时索引越界,核心原因是你下载的文件实际是.xls格式,只是网站服务器错误给文件加了.xlsx后缀,文件本身没有损坏,你手动另存为.xls可正常读取也验证了这一点。

批量处理方案

方案1:读取时强制指定xls读取引擎(最简便,无需修改原文件)

直接在read_excel中指定使用xlrd引擎,该引擎专门用于读取.xls格式,不会受文件后缀名干扰:

import pandas as pd
import os

# 目标文件夹路径
folder_path = r'M:\PUBLIC\Felipe Dias\ONS'

# 批量读取所有目标文件
for filename in os.listdir(folder_path):
    if filename.endswith('.xlsx'):
        file_path = os.path.join(folder_path, filename)
        df = pd.read_excel(file_path, engine='xlrd')
        # 后续处理逻辑写在这里

如果环境中未安装xlrd,执行pip install xlrd安装即可,高版本xlrd仅不支持.xlsx格式读取,完全适配你的场景。

方案2:批量修正文件后缀(适合需要统一文件格式的场景)

你可以通过判断二进制文件头自动识别实际格式,批量把后缀错误的.xlsx文件重命名为.xls,避免后续读取再出现兼容问题:

import os

folder_path = r'M:\PUBLIC\Felipe Dias\ONS'
for filename in os.listdir(folder_path):
    if not filename.endswith('.xlsx'):
        continue
    file_path = os.path.join(folder_path, filename)
    # 读取前4字节判断实际格式
    with open(file_path, 'rb') as f:
        file_header = f.read(4)
    # .xls文件头为b'\xd0\xcf\x11\xe0',.xlsx为zip格式头b'PK\x03\x04'
    if file_header == b'\xd0\xcf\x11\xe0':
        new_filename = f"{os.path.splitext(filename)[0]}.xls"
        os.rename(file_path, os.path.join(folder_path, new_filename))

方案3:通用兼容读取函数(适合文件夹内同时存在真.xlsx和格式错误文件的场景)

如果你的文件夹内既有真实的.xlsx文件,也有后缀错误的文件,可以写自动兼容的读取函数,自动尝试不同引擎:

import pandas as pd

def read_excel_compatible(file_path, **kwargs):
    # 先尝试读取标准.xlsx格式
    try:
        return pd.read_excel(file_path, engine='openpyxl', **kwargs)
    # 读取失败则尝试用xls引擎读取
    except Exception:
        return pd.read_excel(file_path, engine='xlrd', **kwargs)

# 调用示例
df = read_excel_compatible(r'M:\PUBLIC\Felipe Dias\ONS\DIARIO_16-11-2021.xlsx')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:08