You need to enable JavaScript to run this app. 如何提升pandas嵌套apply的运行效率,快速移除姓名中的违规词汇
优惠活动
大模型
产品
解决方案
定价
更多

如何提升pandas嵌套apply的运行效率,快速移除姓名中的违规词汇

优化方案

核心思路是把多次逐行替换改成单次批量操作,从根源上减少调用次数,以下是两种无第三方依赖的实现方案:

方案1:正则批量替换(适用任意子串匹配场景)

不需要循环每个非法词执行替换,可将所有非法词拼接为单个正则匹配模式,结合pandas原生矢量化字符串方法一次性完成所有替换,调用次数从5亿次降到仅1次全量操作,性能提升2~3个数量级。

import re

# 构造正则模式:先对每个非法词做转义避免特殊字符报错,用|拼接表示匹配任意一个非法词
# 若需要仅匹配完整单词,可将pattern改为 rf"\b({'|'.join(map(re.escape, illegal_words))})\b"
pattern = f"({'|'.join(map(re.escape, illegal_words))})"

# 用pandas原生str.replace做矢量化替换,性能远高于apply+自定义函数
names['name'] = names['name'].str.replace(pattern, '', regex=True)

方案2:集合过滤(适用完整单词匹配场景,速度更快)

如果需求是仅删除完全匹配的独立单词(不会误删姓名中包含非法词的子串),用集合查找+单词过滤的方案速度会比正则更快,集合的成员查找时间复杂度为O(1),2000个词的查找几乎无开销:

# 先把非法词转成集合提高查找效率
illegal_set = set(illegal_words)

# 拆分姓名为单词列表,过滤掉非法词后重新拼接
names['name'] = names['name'].str.split().apply(lambda x: ' '.join([word for word in x if word not in illegal_set]))

内容的提问来源于stack exchange,提问作者Rafaó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:27:01