Замена вложенных регулярных выражений в цикле с пандами - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь выполнить замену вложенных регулярных выражений в пандах, и мне трудно захватить все вложенные компоненты в регулярных выражениях.

Например, я хотел бы удалить все экземпляры 'ba' и 'ba ca' из столбца A в кадре данных.Но я могу удалить только 'ba', в то время как 'ca' часть "ba ca" не удаляется, потому что я думаю, что 'ba' вложено в 'ba ca'

df = pd.DataFrame({'A': ['ba t', 'ba ca t', 'foo', 'ba it'],'B': ['abc','abc', 'bar', 'xyz']})

replace_list=['ba','ba ca']

for i in replace_list:
    df=df.replace({'A': r'^({})'.format(i)}, {'A': ''}, regex=True)
df

Я ожидаю строку index=1 для столбца A будет t, а не ca t.Любая помощь высоко ценится.

       A    B
0      t  abc
1   ca t  abc
2    foo  bar
3     it  xyz

1 Ответ

3 голосов
/ 21 июня 2019

Превратите replace_list в одно регулярное выражение:

df['A'].str.replace('|'.join(replace_list[::-1]), '').str.strip()

Выход:

0      t
1      t
2    foo
3     it
Name: A, dtype: object

Обратите внимание на перевернутый replace_list, так что сначала он проверяет ba ca, а затем ba, таким образом, не оставляя часть ca.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...