我有一个pandas数据帧
id text
1 acclrtr actn corr cr
2 plate corr aff
3 alrm alt
和字典
dict={'acclrtr':'accelerator','actn':'action','corr':'corrosion','cr':'chemical resistant','aff':'affinity','alrm':'alarm','alt':'alternate'}
我需要将dataframe中的字典键替换为其值
我尝试了以下代码,但没有一个正常工作
1
data['text']=data['text'].str.replace(dict.keys(), dict.values())
2
data['text']=data['text'].replace(dict, inplace=True)
3
data['text']=data['text'].apply(lambda x: [item.replace(to_replace=dict) for item in x])
4
for key, value in dict.items():
data['text']=data['text'].apply(lambda x: list(set([item.replace(key,value) for item in x])))
任何人都可以告诉我,我在哪里做错了以及如何正确地替换键值?
答案 0 :(得分:4)
<强>更新强>
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
其中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
RegEx说明:
'(\\b)word(\\b)'
- 意味着搜索一个单词,在单词边界之前和之后,并将两个单词边界放在捕获组中:第一个专利 - 第一个捕获组等。
\\1
- 在替换部分中说放置第一个 cpaturing组的内容(在我们的例子中为单词边界)