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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:06:14