检查列表中的单词并在 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 数据框列中删除这些单词的主要内容,如果未能解决你的问题,请参考以下文章