gpt4 book ai didi

python - 加快这个 for 循环 - python

转载 作者:行者123 更新时间:2023-11-28 21:41:05 25 4
gpt4 key购买 nike

从我的分析中,我可以看到这个函数需要更多的时间来处理。我如何加速这段代码?我的数据集有超过 100 万条记录,我在这里给出的这个停用词列表只是一个示例——它实际上包含 150 个单词。

def remove_if_name_v1(s):
stopwords = ('western spring','western sprin','western spri','western spr','western sp','western s',
'grey lynn','grey lyn','grey ly','grey l')
for word in stopwords:
s = re.sub(r'(' + word + r'.*?|.*?)\b' + word + r'\b', r'\1', s.lower(), 1)
return s.title()

test.new_name = test.old_name.apply(lambda x: remove_if_name_v2(x) if pd.notnull(x) else x)

似乎该函数针对数据框中的每一行运行,并且在每一行中,它运行 for 循环的次数与停用词的次数一样多。有什么替代方法吗?

我在这里尝试做的是示例,如果字符串包含“western spring road western spring”,此函数将返回“western spring road”。

谢谢。

最佳答案

您可以组合并预编译正则表达式以获得相当大的改进。

stopwords = ('western spring',
'western sprin',
'western spri',
'western spr',
'western sp',
'western s',
'grey lynn',
'grey lyn',
'grey ly',
'grey l')

pat = re.compile(r'(?P<repl>(?P<word>{stopwords}).*?|.*?)\b(?P=word)\b'.format(
stopwords='|'.join(re.escape(s) for s in stopwords)))

test.old_name.str.replace(pat, '\g<repl>')

注意 (?P=word) 反向引用。我还使用了 Series.str.replace 而不是 Series.apply,后者稍微简洁一些。

关于python - 加快这个 for 循环 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45092752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com