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

Python中如何将DataFrame转为UTF-8编码 解决charmap编码报错问题

非UTF-8字符DataFrame编码报错处理方案

你遇到的charmap编码报错是因为写入日志时系统默认编码(通常是Windows下的GBK)无法匹配PDF导入的特殊Unicode字符,可通过以下两种方案解决:

方案1:不修改数据,调整写入编码(优先推荐)

不需要对DataFrame本身做任何处理,仅在打开日志文件时指定utf-8编码即可兼容所有Unicode字符,不会丢失原始数据:

# 写入时指定编码,适配所有特殊字符
with open("运行日志.log", "w", encoding="utf-8") as log_file:
    log_file.write(df.to_string())

如果是用pandas自带的to_csv等方法写文件,也可以直接指定编码参数:

df.to_csv("导出结果.csv", encoding="utf-8", index=False)

方案2:批量清洗DataFrame所有字符

如果后续处理必须要求ASCII编码,可以对整个DataFrame的所有单元格批量执行归一化转码操作:

import unicodedata
import pandas as pd

def clean_cell_value(val):
    # 跳过非字符串类型的单元格(数值、日期等不需要处理)
    if not isinstance(val, str):
        return val
    # 执行NFD归一化后转ASCII,忽略无法编码的字符,再转回字符串格式
    normalized = unicodedata.normalize("NFD", val)
    return normalized.encode("ascii", "ignore").decode("ascii")

# 全表逐元素应用清洗规则
# pandas 2.0及之前版本用applymap
df_cleaned = df.applymap(clean_cell_value)
# pandas 2.1及之后版本用map替换已弃用的applymap
# df_cleaned = df.map(clean_cell_value)

两种方案适用场景

  • 方案1适配性更强,不会丢失原始信息,无特殊要求优先使用
  • 方案2适合必须使用ASCII编码的下游场景,会丢弃无法转码的特殊字符

内容的提问来源于stack exchange,提问作者Chuck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:18:04