Как использовать карту со словарем, имеющим ключи регулярного выражения? - PullRequest
4 голосов
/ 11 октября 2019

У меня есть 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'}), но в реальном мире регулярное выражение намного сложнее. Кроме того, словарь намного сложнее, так что решение здесь (которое требует добавления начального и конечного состояний и применения re.compile вокруг клавиш) неосуществимо.

Ответы [ 2 ]

4 голосов
/ 11 октября 2019

Использование 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
1 голос
/ 11 октября 2019

Я не уверен, насколько сложен ваш словарь. Но если это не слишком долго, мы можем просто сопоставить и заменить одно на другое:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...