#python #pandas
Вопрос:
Я хочу заменить следующее регулярное выражение:
(?<!d)(d{2}-d{2})(?!d)
с определенной ценностью.
Например
column = pd.Series(['01-01', '01-01 qwerasdf 0101-0101'])
Я хочу заменить все '01-01'
на '0101'
(но никакие цифры до и после '01-01'
этого '0101-0101'
не останутся неизменными)
Я могу использовать следующее, чтобы получить то, что я хочу.
column = column.str.replace(r'(?<!d)(d{2}-d{2})(?!d)', '0101', regex=True)
Но теперь у меня есть словарь, который нужно заменить на
{'01-01': '0101', '01-02': '0102'...}
Как я могу использовать регулярное выражение и словарь одновременно в функции замены?
Ответ №1:
Используйте обратный вызов со словарем, если нет совпадения, возвращайте то же значение, что и для 05-07
with dict.get
:
column = pd.Series(['01-01', '01-01 qwerasdf 0101-0101', '01-02 aa', '05-07 dd'])
d = {'01-01': '0101', '01-02': '0102'}
column = column.str.replace(r'(?<!d)(d{2}-d{2})(?!d)',
lambda x: d.get(x.group(), x.group()),
regex=True)
print (column)
0 0101
1 0101 qwerasdf 0101-0101
2 0102 aa
3 05-07 dd
dtype: object
Комментарии:
1. Я не совсем понимаю, что означает x.group ()? Это из модуля re?
2. @k07224115 — да, это для группы совпадений.