检查列表中的单词并删除pandas dataframe列中的单词

hai*_*men 7 python regex replace python-2.7 pandas

我有一个如下列表,

remove_words = ['abc', 'deff', 'pls']
Run Code Online (Sandbox Code Playgroud)

以下是我使用列名'string'的数据框

     data['string']

0    abc stack overflow
1    abc123
2    deff comedy
3    definitely
4    pls lkjh
5    pls1234
Run Code Online (Sandbox Code Playgroud)

我想检查pandas dataframe列中remove_words列表中的单词,并删除pandas数据帧中的这些单词.我想检查单独出现的单词,而不是用其他单词出现.

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

     data['string']

0    stack overflow
1    abc123
2    comedy
3    definitely
4    lkjh
5    pls1234
Run Code Online (Sandbox Code Playgroud)

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

我在python中尝试过很少的东西,没有太大的成功.有人可以帮我这么做吗?任何想法都会有所帮助.

谢谢

Max*_*axU 9

试试这个:

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
Run Code Online (Sandbox Code Playgroud)


piR*_*red 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
Run Code Online (Sandbox Code Playgroud)