如何将map与具有正则表达式键的字典一起使用?

时间:2019-10-11 13:50:51

标签: regex python-3.x pandas dictionary key

我有一个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)是不可行的。

2 个答案:

答案 0 :(得分:4)

replaceregex=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

答案 1 :(得分:1)

我不确定您的字典有多复杂。但是,如果时间不太长,我们可以一一匹配并替换:

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