字符串替换为多个项目

时间:2018-04-28 17:11:41

标签: python pandas nlp

我有两个pandas数据帧。一个包含文本,另一个包含我想在文本中搜索和替换的术语。我已经创建了一个循环,它能够用一个术语替换文本中的每个单词但是它非常慢,特别是考虑到它在大型语料库上工作。

我的问题是: 是否有更有效的解决方案可以复制我的方法?

示例文本数据框:

d = {'ID': [1, 2, 3], 'Text': ['here is some random text', 'random text here', 'more random text']}
text_df = pd.DataFrame(data=d)

示例术语dataframe:

d = {'Replace_item': ['<RANDOM_REPLACED>', '<HERE_REPLACED>', '<SOME_REPLACED>'], 'Text': ['random', 'here', 'some']}
replace_terms_df = pd.DataFrame(data=d)

当前解决方案的示例:

def find_replace(text, terms):
for _, row in terms.iterrows():
    term = row['Text']
    item = row['Replace_item']
    text.Text = text.Text.str.replace(term, item)
    return text
find_replace(text_df, replace_terms_df)

如果上述任何内容需要澄清,请告诉我。谢谢,

1 个答案:

答案 0 :(得分:1)

在三列上使用zip + str.replace,并立即将结果分配给列,将时间缩短了50%(使用%timeit将约400us减少到200us):

text_df['Text'] = [z.replace(x, y) for (x, y, z) in zip(replace_terms_df.Text, replace_terms_df.Replace_item, text_df.Text)]