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

Pandas处理CSV硬编码Unicode字符转对应字符失败问题

解决CSV中硬编码Unicode转义字符的替换问题

这个问题我碰到过好几次,核心原因是你误解了CSV里存储的内容——那些\u00e9并不是Python层面的Unicode字符,而是作为普通文本存储的转义序列(也就是实际字符串里是\、u、0、0、e、9这几个独立字符)。你之前用'\u00e9'去匹配,其实是在找已经解析后的Unicode字符é,自然找不到目标内容。

下面给你两种可行的解决方法:

方法一:针对性正则替换(适合单种转义)

如果只需要处理\u00e9这类特定转义,直接用正则匹配原始的转义文本,注意要转义反斜杠(因为反斜杠在正则里是特殊字符):

df['Objectif(s)'] = df['Objectif(s)'].replace(r'\\u00e9', 'é', regex=True)
  • 这里r'\\u00e9'是原始字符串,代表匹配文本中的\u00e9序列
  • 必须加上regex=True,否则pandas会默认尝试匹配整个字符串,而不是子串

方法二:批量解析所有Unicode转义(通用方案)

如果你的CSV里还有其他类似的Unicode转义(比如\u00e0、\u00e8等),用ast.literal_eval可以一次性解析所有转义序列,把文本转成正常的Unicode字符:

import ast

# 注意要处理可能的非字符串值,避免报错
df['Objectif(s)'] = df['Objectif(s)'].apply(
    lambda x: ast.literal_eval(x) if isinstance(x, str) else x
)

这个方法的原理是让Python把字符串里的转义序列当成代码层面的转义来解析,比如把文本中的\u00e9解析成实际的é字符。

为什么你之前的方法失效?

你单独测试时写的s = "d'activit\u00e9s",Python在定义字符串时已经自动把\u00e9解析成了é,所以替换有效;但CSV里的内容是读取后保留了原始的转义文本(也就是字符串里存的是\u00e9这几个字符),所以用'\u00e9'去匹配完全找不到对应内容。

验证结果

处理完成后,可以用下面的代码确认效果:

print(df['Objectif(s)'].head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:20:05