如何高效为DataFrame每行url批量去除协议与www前缀
最优解决方案
推荐使用pandas原生矢量化正则替换,仅需一次遍历即可完成所有匹配替换,效率是原有四次替换写法的3~4倍,也远高于逐行循环的apply方案,同时可避免原有写法的误匹配问题:
df['url'] = df['url'].str.replace(r'^(https?|ftp)://(www\.)?', '', regex=True)
方案说明
- 正则用
^锚定字符串开头,只会匹配URL最前面的协议和www前缀,不会误删URL中间出现的对应字符 https?同时匹配http和https两种协议,(www\.)?匹配可选的www前缀,所有符合规则的内容会被一次性替换为空- 原有写法默认开启正则匹配时,
www.中的.会作为通配符匹配任意字符,存在误删风险,当前方案用\.转义后仅匹配字面量的点号
可选的apply实现(不推荐用于600万行级大数据集)
如果一定要用lambda+apply实现,写法如下,不过该方案本质是逐行遍历,大数量场景下执行速度远低于第一种矢量化方案:
import re df['url'] = df['url'].apply(lambda x: re.sub(r'^(https?|ftp)://(www\.)?', '', x))
内容的提问来源于stack exchange,提问作者Azarkuz
相关产品推荐
相关产品推荐

