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

含制表符的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:32:41