【发布时间】:2019-10-29 06:53:52
【问题描述】:
我有一个包含对话的大型数据集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 个变量和超过 250 万行的 all_transcripts),这在计算上会非常昂贵,因此,我想要一种与上面类似的方法,使用 OR 运算符替换字符串。
【问题讨论】:
-
为什么不使用 for 循环?您的正则表达式引擎在下面实现了相同的功能。如果查询中有这么多
|,最好只使用for循环。 -
如果您提供了一个示例
gemeentes列表和替换后的所需结果,这将很有用。如果我必须根据提供的信息进行猜测,您需要re.sub(r"\b({})\b".format('|'.join(gemeentes)),' woonplaats ')。 -
@ZachWoods 我编辑了我的问题,向您展示我想要什么。你知道我该怎么做吗?