如何使用pandas正确读取xls文件并解决多文件合并异常
问题核心原因
代码中错误使用pd.read_csv()方法读取.xls格式的二进制Excel文件,是导致乱码、无效内容的根本原因。pd.read_csv()仅适用于读取纯文本分隔符格式的文件(如.csv/.tsv),直接用它解析二进制结构的xls文件时,会把文件内部存储的格式样式(你看到的CSS片段就属于这类格式元数据)、二进制编码内容、文件路径信息全部当成普通文本解析,自然无法得到结构化的有效表格数据。
修复步骤
- 安装xls格式读取依赖
pandas读取老式xls格式需要依赖xlrd库,先在终端执行安装命令:pip install xlrd
如果安装后遇到版本兼容报错,换用适配性更广的1.2.0版本即可:pip install xlrd==1.2.0 - 替换读取方法,调整冗余参数
把代码中读取文件的pd.read_csv()替换为专门读取Excel格式的pd.read_excel(),同时删除sep/encoding/on_bad_lines这些仅适用于csv读取的无效参数,保留你原本设置的header=3(即表头在第4行,索引从0开始计数)逻辑即可。
修正后可直接运行的代码
import pandas as pd from glob import glob # 匹配路径下所有符合命名规则的xls文件 file_list = sorted(glob(r'C:\Users\de0186619\Documents\saldo_usuario_*.xls')) df_container = [] for file_path in file_list: # 按指定表头位置读取单个xls文件 single_df = pd.read_excel(file_path, header=3) # 新增列标记数据来源文件,和原代码逻辑一致 single_df['filename'] = file_path df_container.append(single_df) # 纵向合并所有表格 merged_df = pd.concat(df_container, ignore_index=True) # 打印预览结果,同时保存为本地Excel文件 print(merged_df) merged_df.to_excel(r'C:\Users\de0186619\Documents\saldo_usuario_merged.xlsx', index=False)
补充说明
如果替换方法后依然读取异常,先手动打开一个目标xls文件确认:部分系统导出的文件会把html格式的表格直接改后缀为.xls,这类假xls文件需要针对性调整读取逻辑,但从目前输出包含CSS片段的现象判断,90%以上的概率是错误使用read_csv方法导致的,替换后即可得到保留原有结构、包含全部原始数据的合并文件。
内容的提问来源于stack exchange,提问作者Vinícius Donato
相关产品推荐
相关产品推荐

