使用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还是容易触发这个问题。
解决方法非常直接:
- 在
pd.read_excel()中指定使用openpyxl引擎(它专门处理.xlsx文件):df = pd.read_excel(f, engine='openpyxl') - 如果你还没安装
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
相关产品推荐
相关产品推荐

