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

使用Pandas合并Excel文件时遇报错及列对齐问题求助

解决Pandas合并Excel文件的两个问题:格式报错与列对齐混乱

第一个问题:xlrd格式报错

你遇到的这个报错:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\x15Microso'

其实是因为你当前使用的xlrd版本(大概率是1.x系列)只支持旧的.xls格式,对.xlsx文件的兼容性很差——哪怕你重新保存了文件,用xlrd读取xlsx还是容易触发这个问题。

解决方法非常直接:

  1. 在pd.read_excel()中指定使用openpyxl引擎(它专门处理.xlsx文件):
    df = pd.read_excel(f, engine='openpyxl')
    
  2. 如果你还没安装openpyxl,先在终端执行安装命令:
    pip install openpyxl
    

第二个问题:合并后列无法对齐

列错位的核心原因是各个Excel文件的表头位置或列结构不一致:有的文件从A列开始就是有效表头,有的前面几列是空的,Pandas读取时会把空列也纳入,而合并时是按列名匹配的,自然就出现了错位。

你可以按以下步骤修复:

  • 统一表头位置:如果某个文件的表头不在第一行(比如第二行才是列名),用header参数指定,比如pd.read_excel(f, engine='openpyxl', header=1)
  • 过滤无效空列:用usecols参数指定要读取的有效列范围,比如只读取A到Z列:pd.read_excel(f, engine='openpyxl', usecols='A:Z')
  • 改用更稳定的合并方法:弃用已经被Pandas弃用的append(),换成pd.concat(),效率更高且不易出问题

修改后的完整脚本

import pandas as pd
import glob
from sys import argv

script, file_location, outpath = argv
files = glob.glob(file_location + "*.xlsx")
all_data = []

for f in files:
    # 根据你的实际情况调整header(表头行)和usecols(列范围)
    df = pd.read_excel(f, engine='openpyxl', header=0, usecols='A:Z')
    # 如果各个文件列名不一致,可手动统一列名:
    # df.columns = ['列名1', '列名2', '列名3', ...]
    all_data.append(df)

# 合并数据并重置索引
combined_df = pd.concat(all_data, ignore_index=True)
# 导出时去掉默认索引
combined_df.to_excel(f"{outpath}.xlsx", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:39:17