如何移除数据集中city列的编码字符?
处理数据集中含转义UTF-8编码的城市名称优化方案
你当前手动维护替换字典的方法虽然能解决问题,但存在两个明显不足:一是需要逐个枚举所有出现的转义字符,容易遗漏;二是多次调用str.replace会反复遍历整个列,数据量大时效率偏低。
更高效且通用的解决方案是利用Python的编码解码机制直接修复这类转义问题——你的字符串本质是UTF-8字节被错误地以拉丁-1(Latin-1)编码解析成了字符串,反过来操作就能还原正确字符:
优化代码示例
import pandas as pd # 对city列进行批量修复 df['city'] = df['city'].apply(lambda x: x.encode('latin-1').decode('utf-8'))
原理说明
以你的样本字符串S\\xC3\\xA3o Paulo为例:
- 字符串实际存储为
S\xC3\xA3o Paulo,包含两个转义字符\xC3和\xA3; encode('latin-1')将每个字符转换成对应字节(拉丁-1是单字节编码,每个字符对应一个字节),得到UTF-8格式的字节序列b'S\xc3\xa3o Paulo';decode('utf-8')将字节序列解码为正确的Unicode字符串São Paulo。
对比优势
- 通用性强:无需手动维护替换字典,能自动处理所有UTF-8编码的特殊字符(包括你字典里的ã、á、ü等,以及未提前遇到的字符);
- 效率更高:仅需遍历列一次,远快于多次调用
str.replace的方式; - 无副作用:对原本正常的字符串(不含转义的城市名),该操作完全无损,不会改变原有内容。
内容的提问来源于stack exchange,提问作者Nathalia Bedor
相关产品推荐
相关产品推荐

