导出CSV时特殊字符‘–’丢失求助:尝试utf-8等编码无效
解决CSV导出时特殊短破折号丢失问题
先查读取环节,别只盯着导出
问题大概率不在导出,而是读取a.xlsx时,特殊短破折号(–,不是普通的-)就没被正确解析。试试用openpyxl引擎读取,它对xlsx格式的特殊字符支持更好:
import pandas as pd df = pd.read_excel('a.xlsx', engine='openpyxl')
如果是xls格式,改用xlrd(注意xlrd 2.0及以上版本不支持xlsx,要对应版本安装)。
调整导出参数,针对性解决
- 用带BOM的UTF-8编码:Windows下很多工具(比如Excel)识别UTF-8文件需要BOM,否则特殊字符可能显示异常:
df.to_csv('output.csv', encoding='utf-8-sig')
- 明确分隔符和引号规则,避免特殊字符被误处理:
df.to_csv('output.csv', encoding='utf-8-sig', sep=',', quotechar='"', quoting=pd.io.common.csv.QUOTE_NONNUMERIC)
- 先确认DataFrame里有没有这个字符:如果导出后丢失,先检查读取后的DataFrame里是否存在该字符,排除读取问题:
# 检查目标列是否包含短破折号 print(df['你的目标列名'].str.contains('–').any()) # 查看包含该字符的行内容 print(df.loc[df['你的目标列名'].str.contains('–'), '你的目标列名'])
备选:替换特殊字符
如果上述方法都没用,直接把DataFrame里的特殊短破折号替换成普通破折号,或者用更稳定的编码导出:
# 替换为普通破折号 df['你的目标列名'] = df['你的目标列名'].str.replace('–', '-') # 或者用UTF-16加制表符分隔,避免编码冲突 df.to_csv('output.csv', encoding='utf-16', sep='\t')
内容的提问来源于stack exchange,提问作者Rajyaditya Singh
相关产品推荐
相关产品推荐

