含制表符的Excel导入Pandas后导出CSV乱码问题排查
Excel加载制表符导致CSV乱码的处理
我的Excel文件里的Description列包含制表符和换行符,加载到Pandas DataFrame后,我把所有这类特殊字符序列替换成单个分号加空格,再导出为CSV文件。但导出的CSV里,原来制表符的位置出现了乱码,换行符已经被正常替换,所以我怀疑问题出在Excel文件的加载阶段,想知道pd.read_excel有没有参数能解决这个问题。
加载文件代码
import sys import glob import pandas as pd # 从Excel文件提取数据并合并为单个DataFrame def extract(input_files, sheet_name): # 获取路径下的Excel文件 file_list = glob.glob(input_files + "/*.xls*") print(f'待加载文件数量: {len(file_list)}') # 存储读取的DataFrame列表 excl_list = [] for file in file_list: excl_list.append(pd.read_excel(io=file, sheet_name=sheet_name, header=0)) # 合并所有DataFrame excl_merged = pd.concat(excl_list, axis=0) print('文件合并完成') return excl_merged
转换Description列代码
def transform(df, confidence, min_length, operations): if "special" in operations.lower(): df['Description'] = df['Description'].str.replace(r'[\v\n\r\t]+','; ', regex=True) # ... 省略其他代码 ... return df
解决方案
1. 强制指定读取引擎
pd.read_excel会自动根据文件后缀选引擎,但不同引擎对特殊字符的解析可能有差异。可以强制指定引擎:
- 针对
.xlsx文件,用engine='openpyxl' - 针对
.xls文件,用engine='xlrd'
修改加载代码中的pd.read_excel调用:
excl_list.append(pd.read_excel(io=file, sheet_name=sheet_name, header=0, engine='openpyxl'))
2. 扩展特殊字符清洗范围
原来的正则只覆盖了部分控制字符,换成更全面的正则,清理所有ASCII控制字符:
df['Description'] = df['Description'].str.replace(r'[\x00-\x1F\x7F]+','; ', regex=True)
这个正则会匹配所有ASCII控制字符(包括制表符、换行符、垂直制表符等不可见字符),确保替换更彻底。
3. 优化CSV导出配置
虽然你怀疑问题不在导出阶段,但给CSV加上全字段引号可以避免特殊字符破坏文件结构:
import csv df.to_csv('output.csv', quoting=csv.QUOTE_ALL, index=False)
内容的提问来源于stack exchange,提问作者Paul Chernoch
相关产品推荐
相关产品推荐

