我有一个包含对话的大型数据集all_transcripts
,还有一个包含不同城市名称的小列表gemeentes
。在all_transcripts
中,我想用“ woonplaats”(城市的荷兰语)替换给出城市名称的每个实例。
为此,我有以下代码:
all_transcripts['filtered'] = all_transcripts['no_punc'].str.replace('|'.join(gemeentes),' woonplaats ')
但是,这将替换出现单词组合的每个实例,而不仅仅是整个单词。
我正在寻找的东西是这样的:
all_transcripts['filtered'] = all_transcripts['no_punc'].re.sub('|'r"\b{}\b".format(join(gemeentes)),' woonplaats ')
但这不起作用。
例如,我有:
all_transcripts['no_punc'] = ['i live in amsterdam', 'i come from haarlem', 'groningen is her favourite city']
gemeentes = ['amsterdam', 'rotterdam', 'den haag', 'haarlem', 'groningen']
运行代码后,我想要的输出如下:
>>> ['i live in woonplaats', 'i come from woonplaats', 'woonplaats is her favourite city']
之前,我使用过正则表达式的'\ b'选项。但是,我不知道如何在这里应用它。我可以为gemeentes
中的每个单词运行一个for循环,并将其应用于整个数据集。但是考虑到它的大小(gemeentes具有300多个变量,而all_transcripts超过250万行),这在计算上将非常昂贵,因此,我希望使用与上述类似的方法,使用OR运算符替换字符串。
答案 0 :(得分:2)
您似乎已经快到了,但是您需要稍微更改re.sub
通话。这样的事情应该起作用:
gemeentes = ['amsterdam', 'rotterdam', 'den haag', 'haarlem', 'groningen']
all_transcripts['filtered'] = [re.sub(r"\b({})\b".format("|".join(gemeentes)), "woonplaats", s) for s in all_transcripts['no_punc']]
all_transcripts ['filtered'] = ['我住在woonplaats','我来自woonplaats','woonplaats是她最喜欢的城市']
关于性能,我不确定您是否会通过传统的for循环获得更快的速度,因为您仍然需要遍历2500万个条目并应用正则表达式。
答案 1 :(得分:0)
如果您使用的是熊猫数据框,则可以使用以下内容:
import pandas as pd
all_transcripts['filtered']= all_transcripts.replace([amsterdam', 'rotterdam', 'den haag', 'haarlem', 'groningen'], "woonplaats", regex=True)