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

优化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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:45:32