优化Python中DataFrame去除重音与特殊字符的方法
优化DataFrame去重音和特殊字符的实现方案
你的原代码通过多次调用str.replace处理重音和特殊字符,每次调用都需要遍历整个列,效率较低。下面提供几种更高效的优化方案:
方法1:用unicodedata归一化处理(通用型,覆盖所有重音)
这种方法无需手动枚举所有重音字符,能处理所有Unicode标准下的带重音字符,同时完成特殊字符过滤,一次遍历即可完成操作。
import pandas as pd import unicodedata m = pd.read_excel('file.xlsx') def clean_text(text): # NFKD归一化:将带重音的字符分解为基础字符+重音标记 normalized_text = unicodedata.normalize('NFKD', text) # 过滤掉重音标记,保留基础字符,再移除非字母数字的特殊字符 cleaned = ''.join([c for c in normalized_text if not unicodedata.combining(c)]) return cleaned.replace(r'\W', '', regex=True) m['hola'] = m['hola'].apply(clean_text) print(m)
方法2:用str.translate批量替换(针对特定重音,速度最快)
如果只需要处理代码中列出的那几种重音字符,构建翻译表后用str.translate批量替换,比多次str.replace效率高得多,因为它是一次性完成所有字符映射。
import pandas as pd m = pd.read_excel('file.xlsx') # 定义重音字符映射关系 accent_mapping = { 'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u', 'Á': 'A', 'É': 'E', 'Í': 'I', 'Ó': 'O', 'Ú': 'U' } # 生成字符串翻译表 translation_table = str.maketrans(accent_mapping) # 先批量替换重音,再过滤特殊字符 m['hola'] = m['hola'].str.translate(translation_table).str.replace(r'\W', '', regex=True) print(m)
方法3:正则一次性匹配替换(适合简单场景)
通过正则字符集一次性匹配所有目标重音字符,结合替换函数完成映射,比原代码的多次替换更高效。
import pandas as pd m = pd.read_excel('file.xlsx') def replace_accent_char(match): char = match.group(0) accent_map = { 'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u', 'Á': 'A', 'É': 'E', 'Í': 'I', 'Ó': 'O', 'Ú': 'U' } return accent_map.get(char, char) # 先替换重音,再过滤特殊字符 m['hola'] = m['hola'].str.replace(r'[áéíóúÁÉÍÓÚ]', replace_accent_char, regex=True).str.replace(r'\W', '', regex=True) print(m)
优化说明
- 原代码多次调用
str.replace,每次都要遍历整个列,产生额外的计算和IO开销; - 优化后的方案都只需要1-2次列遍历,大幅提升处理速度;
- 方法1通用性最强,能处理像
ñ、ü这类未在原代码中列出的重音字符,推荐优先使用。
内容的提问来源于stack exchange,提问作者Breik
相关产品推荐
相关产品推荐

