pandas replace正则替换越南语Unicode编码未生效问题排查
替换失败的核心原因
- 未接收
replace的返回结果:pandas绝大多数数据处理方法默认不修改原数据,而是返回处理后的新对象,直接调用方法不赋值,原duong数据框不会发生任何变化。 - 正则匹配规则失效:设置了
regex=True,但映射字典里的key包含正则特殊字符+(该字符在正则中代表匹配前一个字符1次及以上),没有做转义的情况下,生成的匹配规则和要查找的字面量<U+1EDD>这类字符串完全不匹配,根本找不到要替换的内容。 - 冗余操作:对整个DataFrame执行替换会遍历所有列,实际只需要替换存储文本的
duong列即可,执行效率更高。
修正方案
当前场景是固定字符串替换,不需要使用正则,关闭正则模式做字面量替换即可,代码如下:
import pandas as pd duong = pd.read_csv('sample.csv') code = pd.read_csv('viscii.csv') # 构造映射字典,注意viscii.csv的value列名前带空格,不要写错列名 code_dict = dict(zip(code['key'], code[' value'])) # 仅对duong列做替换,关闭正则模式,将结果赋值回原列 duong['duong'] = duong['duong'].replace(code_dict, regex=False)
执行后输出结果完全符合预期:
No duong 0 1 Ðuờng ÐT 605 1 2 Ðuờng Nam Kỳ Khởi Nghia 2 3 Ðuờng Duy Tân
如果确实需要使用正则模式,记得对key里的正则特殊字符做转义,示例如下:
import re import pandas as pd duong = pd.read_csv('sample.csv') code = pd.read_csv('viscii.csv') code_dict = {re.escape(k): v for k, v in zip(code['key'], code[' value'])} duong['duong'] = duong['duong'].replace(code_dict, regex=True)
内容的提问来源于stack exchange,提问作者dnt
相关产品推荐
相关产品推荐

