我有一个如下列表,
remove_words = ['abc', 'deff', 'pls']
以下是我使用列名'字符串'
的数据框 data['string']
0 abc stack overflow
1 abc123
2 deff comedy
3 definitely
4 pls lkjh
5 pls1234
我想检查pandas dataframe列中remove_words列表中的单词,并删除pandas数据帧中的这些单词。我想检查单独出现的单词,而不是用其他单词出现。
例如,如果有' abc'在pandas df专栏中,将其替换为''但如果它与abc123一起发生,我们需要保持原样。这里的输出应该是,
data['string']
0 stack overflow
1 abc123
2 comedy
3 definitely
4 lkjh
5 pls1234
在我的实际数据中,我在remove_words列表中有2000个单词,在pandas数据框中有50亿个记录。所以我正在寻找最有效的方法。
我在python中尝试过很少的东西,没有太大的成功。有人可以帮我这么做吗?任何想法都会有所帮助。
由于
答案 0 :(得分:8)
试试这个:
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
答案 1 :(得分:3)
完全采用@ 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