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)
谁能告诉我,我在哪里做错了,以及如何正确地用值替换密钥?
更新:
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-在替换部分中,说出放置第一个监控组的内容(在本例中为单词边界)
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |