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中尝试过很少的东西,没有太大的成功.有人可以帮我这么做吗?任何想法都会有所帮助.
谢谢
试试这个:
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)
完全采用@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)
| 归档时间: |
|
| 查看次数: |
4808 次 |
| 最近记录: |