Pandas to_excel函数为何出现编码异常?如何解决?
问题原因及解决方法
原因
Pandas调用to_excel导出xlsx文件时,会默认把_xXXXX_格式的字符串识别为Excel原生的Unicode转义序列,自动解码为对应的Unicode字符(比如_x1470_解码成ᑰ)。而你添加的encoding='utf-8'参数只对纯文本文件(如csv)的编码生效,xlsx属于OpenXML格式,内部存储Unicode编码,因此该参数无法解决这个转义问题。
解决方法
方法1:修改字符串避免转义识别
直接把字符串中的_x替换为__x,让Excel无法识别为转义序列:
import pandas as pd # 原始数据列表 raw_data = ["_x1470_", "_x3108_", "测试文本"] # 替换转义前缀 processed_data = [item.replace("_x", "__x") for item in raw_data] df = pd.DataFrame(processed_data, columns=["content"]) # 导出Excel df.to_excel("error.xlsx", index=False)
导出后Excel中会显示__x1470_,若需要恢复原格式,可手动批量替换回_x。
方法2:强制单元格为文本格式
通过指定Excel引擎,将目标列设置为纯文本格式,阻止Excel解析转义序列:
使用xlsxwriter引擎
import pandas as pd data = ["_x1470_", "_x3108_", "测试文本"] df = pd.DataFrame(data, columns=["content"]) # 确保列类型为字符串 df["content"] = df["content"].astype(str) with pd.ExcelWriter("error.xlsx", engine="xlsxwriter") as writer: df.to_excel(writer, index=False) workbook = writer.book worksheet = writer.sheets["Sheet1"] # 创建文本格式 text_format = workbook.add_format({'num_format': '@'}) # 将第1列(对应content列)设置为文本格式 worksheet.set_column(0, 0, None, text_format)
使用openpyxl引擎
import pandas as pd from openpyxl.styles import numbers data = ["_x1470_", "_x3108_", "测试文本"] df = pd.DataFrame(data, columns=["content"]) with pd.ExcelWriter("error.xlsx", engine="openpyxl", mode="w") as writer: df.to_excel(writer, index=False) worksheet = writer.sheets["Sheet1"] # 遍历目标列,设置为文本格式 for cell in worksheet["A"]: cell.number_format = numbers.FORMAT_TEXT
内容的提问来源于stack exchange,提问作者lone
相关产品推荐
相关产品推荐

