从列表中检查单词并在pandas数据框列中删除这些单词

17

我有一个以下的清单:

remove_words = ['abc', 'deff', 'pls']
以下是我拥有的包含列名为“string”的数据框。
     data['string']

0    abc stack overflow
1    abc123
2    deff comedy
3    definitely
4    pls lkjh
5    pls1234

我想在 Pandas 数据框的列中检查 remove_words 列表中的单词,并删除 Pandas 数据帧中的这些单词。 我想检查独立出现的单词而不是与其他单词一起出现。

例如,如果 Pandas 数据框中有'abc',则将其替换为'',但如果它与'abc123'一起出现,则需要保留原样。 输出应该如下所示:

     data['string']

0    stack overflow
1    abc123
2    comedy
3    definitely
4    lkjh
5    pls1234

在我的实际数据中,我有2000个单词在“remove_words”列表中,以及Pandas数据框架中的50亿条记录。所以我正在寻找最佳高效的方式来处理这个问题。

我已经尝试了一些Python方法,但没有取得太大成功。有人可以帮助我吗?任何想法都会很有帮助。

谢谢


请注意,“def”是Python中的保留关键字,除了方法声明,您应该避免在其他地方使用它。 - SeeDerekEngineer
@SeeDerekEngineer 当然。那只是一个例子。我会记住的。 - haimen
2个回答

26

试试这个:

In [98]: pat = r'\b(?:{})\b'.format('|'.join(remove_words))

In [99]: pat
Out[99]: '\\b(?:abc|def|pls)\\b'

In [100]: df['new'] = df['string'].str.replace(pat, '')

In [101]: df
Out[101]:
               string              new
0  abc stack overflow   stack overflow
1              abc123           abc123
2          def comedy           comedy
3          definitely       definitely
4            pls lkjh             lkjh
5             pls1234          pls1234

6
完全采用@MaxU的模式!
我们可以使用pd.DataFrame.replace,将regex参数设置为True,并传递一个指定每列模式及其替换内容的字典嵌套字典。
pat = '|'.join([r'\b{}\b'.format(w) for w in remove_words])

df.assign(new=df.replace(dict(string={pat: ''}), regex=True))

               string              new
0  abc stack overflow   stack overflow
1              abc123           abc123
2          def comedy           comedy
3          definitely       definitely
4            pls lkjh             lkjh
5             pls1234          pls1234

1
这个也可以。但是因为他先回答了,所以我不得不接受那个答案。非常感谢! - haimen
很高兴我能帮到你。 - piRSquared

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接