如何处理Pandas DataFrame中CSV列的Unicode转对应字符?
解决Pandas加载CSV后Unicode转义字符无法替换的问题
嘿,我懂你遇到的困扰了——之前手动用str.replace()没效果,核心原因是CSV里的Col2列存储的不是真正的Unicode字符,而是字符串形式的列表,里面的转义序列被当成普通文本保存了。比如你看到的\u00e2,在实际数据里是\\u00e2(也就是两个反斜杠),所以直接替换\u00e2根本找不到匹配项。
给你一套靠谱的解决步骤:
1. 解析字符串形式的列表
首先,Col2里的内容看起来像列表,但其实是字符串(比如"[\"consommation \\u00e9nerg\\u00e9tique de b\\u00e2timents publics\"]"),我们需要把它转换成真正的Python列表。用ast.literal_eval()就能完美处理这个:
import pandas as pd import ast # 加载你的CSV文件 df = pd.read_csv("your_file.csv") # 将Col2的字符串解析为实际列表 df["Col2"] = df["Col2"].apply(ast.literal_eval)
2. 提取列表中的目标字符串(可选)
看你的数据,每个列表里只有一个元素,如果你想把它从列表里取出来变成普通字符串列,可以再加一步:
df["Col2"] = df["Col2"].str[0]
验证结果
这时候你再打印Col2的内容,就能看到正确的带重音字符了:
print(df["Col2"].iloc[0]) # 输出:consommation énergétique de bâtiments publics
再给你捋清楚为什么之前的方法没用:
你写的df['Col2'].str.replace('\u00e2', 'â')是在找实际的â字符,但你的CSV里存的是字符串"\\u00e2",也就是文本形式的\u00e2,两者完全不是一回事。而ast.literal_eval()会自动把这些转义序列转换成对应的Unicode字符,一步到位解决问题。
内容的提问来源于stack exchange,提问作者Serk
相关产品推荐
相关产品推荐

