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

Posted

技术标签:

【中文标题】检查列表中的单词并在 pandas 数据框列中删除这些单词【英文标题】:Check for words from list and remove those words in pandas dataframe column 【发布时间】:2018-01-08 21:53:53 【问题描述】:

我有一个列表如下,

remove_words = ['abc', 'deff', 'pls']

以下是我拥有的列名为“字符串”的数据框

     data['string']

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

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

例如,如果pandas df列中有'abc',则将其替换为'',但如果它出现在abc123中,我们需要保持原样。这里的输出应该是,

     data['string']

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

在我的实际数据中,remove_words 列表中有 2000 个单词,pandas 数据框中有 50 亿条记录。所以我正在寻找最有效的方法来做到这一点。

我在 python 中尝试了一些东西,但没有多大成功。有人可以帮我这样做吗?任何想法都会有所帮助。

谢谢

【问题讨论】:

仅供参考,“def”是受保护的 Python 关键字,您应该避免在方法声明之外使用它。 @SeeDerekEngineer 当然。这只是一个例子。我会记住这一点 【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:

完全采用@MaxU 的模式!

我们可以通过将regex 参数设置为True 并传递一个字典字典来使用pd.DataFrame.replace,该字典指定模式以及每列的替换内容。

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

【讨论】:

这个也可以。但既然他先回答,我不得不接受。非常感谢! 很高兴我能帮上忙

以上是关于检查列表中的单词并在 pandas 数据框列中删除这些单词的主要内容,如果未能解决你的问题,请参考以下文章

计算数据框列中列表中单词的出现次数

循环遍历 pandas 数据框列中的列表元素以在新列中返回列表

从 pandas 数据框列中的对象中删除逗号

以字符串形式存储在 Pandas 数据框列中的解析列表

从 Pandas 数据框列中删除“秒”和“分钟”

如何从 pyspark 数据框列中的列表中删除特定字符串