如何将地图与具有正则表达式键的字典一起使用?
Posted
技术标签:
【中文标题】如何将地图与具有正则表达式键的字典一起使用?【英文标题】:How to use map with a dictionary having regular expression keys? 【发布时间】:2020-02-09 01:35:37 【问题描述】:我有一个带有我想要映射的变量的 DataFrame,使用的字典不是“普通”字符串,而是正则表达式。
import pandas as pd
import re
df = pd.DataFrame('cat': ['A1', 'A2', 'B1'])
我想做的是df['cat'].map('A\d': 'a', 'B1': 'b')
,但A\d
似乎没有被解释为正则表达式。在这个简单的 MWE 中,我可以做到 df['cat'].map('A1': 'a', 'A2': 'a', 'B1': 'b')
,但在现实世界中,正则表达式要复杂得多。而且字典要复杂得多,因此the solution here(需要添加开始和结束语句并在键周围应用re.compile
)是不可行的。
【问题讨论】:
【参考方案1】:使用replace
和regex=True
map
需要一个可调用对象。当您将字典传递给它时,它会将字典替换为lambda x: your_dict.get(x, x)
。对于您的目的,replace
是合适的。
df.replace('A\d': 'a', 'B1': 'b', regex=True)
cat
0 a
1 a
2 b
【讨论】:
呃,听起来好得令人难以置信。但它有效。虽然,replace
与 map
有点不同。【参考方案2】:
我不确定你的字典有多复杂。但如果不是太长,我们可以一一匹配替换:
maps = 'A\d': 'a', 'B1': 'b'
(pd.concat((df['cat'].str.match(k) for k in maps), axis=1, ignore_index=True)
.dot(pd.Series(d for k,d in maps.items()))
)
输出:
0 a
1 a
2 b
dtype: object
【讨论】:
以上是关于如何将地图与具有正则表达式键的字典一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
将 BeautifulSoup 4 的 `find_all` 与正则表达式一起使用时,如何访问正则表达式匹配捕获组?