使用字典替换pandas Dataframe中的单词

Ran*_*ish 4 dictionary replace dataframe python-3.x pandas

我有一个熊猫数据框

id  text
1   acclrtr actn corr cr
2   plate corr aff
3   alrm alt
Run Code Online (Sandbox Code Playgroud)

和字典

dict={'acclrtr':'accelerator','actn':'action','corr':'corrosion','cr':'chemical resistant','aff':'affinity','alrm':'alarm','alt':'alternate'}
Run Code Online (Sandbox Code Playgroud)

我需要用其值替换在数据框中找到的字典键

我尝试了以下代码,但没有一个能正常工作

1。

data['text']=data['text'].str.replace(dict.keys(), dict.values())
Run Code Online (Sandbox Code Playgroud)

2。

data['text']=data['text'].replace(dict, inplace=True)
Run Code Online (Sandbox Code Playgroud)

3。

data['text']=data['text'].apply(lambda x: [item.replace(to_replace=dict) for item in x])
Run Code Online (Sandbox Code Playgroud)

4。

for key, value in dict.items():
    data['text']=data['text'].apply(lambda x: list(set([item.replace(key,value) for item in x])))
Run Code Online (Sandbox Code Playgroud)

谁能告诉我,我在哪里做错了,以及如何正确地用值替换密钥?

Max*_*axU 7

更新:

In [108]: data
Out[108]:
   id                  text
0   1  acclrtr actn corr cr
1   2   plate corr affinity   # NOTE: `affinity`
2   3              alrm alt

In [109]: d2 = {r'(\b){}(\b)'.format(k):r'\1{}\2'.format(v) for k,v in d.items()}

In [110]: d2
Out[110]:
{'(\\b)acclrtr(\\b)': '\\1accelerator\\2',
 '(\\b)actn(\\b)': '\\1action\\2',
 '(\\b)aff(\\b)': '\\1affinity\\2',
 '(\\b)alrm(\\b)': '\\1alarm\\2',
 '(\\b)alt(\\b)': '\\1alternate\\2',
 '(\\b)corr(\\b)': '\\1corrosion\\2',
 '(\\b)cr(\\b)': '\\1chemical resistant\\2'}

In [111]: data['text'] = data['text'].replace(d2, regex=True)

In [112]: data
Out[112]:
   id                                             text
0   1  accelerator action corrosion chemical resistant
1   2                         plate corrosion affinity
2   3                                  alarm alternate
Run Code Online (Sandbox Code Playgroud)

其中d-是替换字典。

PS 不会为变量名使用诸如(dict,list等)之类的保留字-它会遮盖内部Python类型,因此您将无法正确使用它们:

In [1]: dict = dict(a='aaa', b='bbb')

In [2]: dict
Out[2]: {'a': 'aaa', 'b': 'bbb'}

In [3]: dict2 = dict(c='ccc')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-650e1aa39edb> in <module>()
----> 1 dict2 = dict(c='ccc')

TypeError: 'dict' object is not callable
Run Code Online (Sandbox Code Playgroud)

RegEx说明:

'(\\b)word(\\b)' -表示先搜索单词,然后搜索单词边界,然后将两个单词边界放入捕获组中:第一专利-第一捕获组,依此类推。

\\1-在替换部分中,说出放置第一个监控组的内容(在本例中为单词边界)