Как применить регулярное выражение для нескольких фраз в столбце данных? - PullRequest
1 голос
/ 14 февраля 2020

Здравствуйте. У меня есть фрейм данных, в котором я хочу удалить определенный c набор символов 'fwd', 're', 'RE' из каждой строки, которая начинается с этих фраз или содержит эти фразы. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как применять регулярные выражения для каждого случая.

мой фрейм данных выглядит следующим образом:

      summary 
0 Fwd: Please look at the attached documents and take action 
1 NSN for the ones who care
2 News for all team members 
3 Fwd:RE:Re: Please take action on the action needed items 
4 Fix all the mistakes please 
5 Fwd:Re: Take action on the attachments in this email 
6 Fwd:RE: Action is required 

Я хочу фрейм данных результата как этот:

          summary 
0 Please look at the attached documents and take action 
1 NSN for the ones who care
2 News for all team members 
3 Please take action on the action needed items 
4 Fix all the mistakes please 
5 Take action on the attachments in this email 
6 Action is required 

Чтобы избавиться от 'Fwd', я использовал df [' msg ']. str.replace (r' ^ Fwd: ',' ')

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Если они могут быть где-нибудь в строке, вы можете использовать повторяющийся шаблон:

^(?:(?:Fwd|R[eE]):)+\s*
  • ^ Начало строки
  • (?: Группа без захвата
    • (?:Fwd|R[eE]): соответствует Fwd, Re или RE
  • )+ Закрыть группу без захвата и повторить 1+ раз
  • \s* Сопоставить трейлинг пробелы

Regex demo

При замене используйте пустую строку.

Вы также можете сделать регистр нечувствительным к регистру, используя re.IGNORECASE и используйте (?:fwd|re), если хотите сопоставить все возможные варианты.

Например

str.replace(r'^(?:(?:Fwd|R[eE]):)+\s*','')
1 голос
/ 14 февраля 2020

Ключевой концепцией в этом случае я считаю использование оператора |, который работает как или или или для шаблона. Это очень полезно для этих случаев.

Вот как я бы решил проблему:

import pandas as pd
df = pd.DataFrame({'index':[0,1,2,3,4,5,6,7],
                   'summary':['Fwd: Please look at the attached documents and take action ',
                              'NSN for the ones who care',
                              'News for all team members ',
                              'Fwd:RE:Re: Please take action on the action needed items',
                              'Fix all the mistakes please ',
                              'Fwd:Re: Take action on the attachments in this email',
                              'Fwd:RE: Action is required',
                              'Redemption!']})
df['clean'] = df['summary'].str.replace(r'^Fwd:|R[eE]:\s*','')
print(df)

Вывод:

   index  ...                                              clean
0      0  ...   Please look at the attached documents and tak...
1      1  ...                          NSN for the ones who care
2      2  ...                         News for all team members 
3      3  ...      Please take action on the action needed items
4      4  ...                       Fix all the mistakes please 
5      5  ...       Take action on the attachments in this email
6      6  ...                                 Action is required
7      7  ...                                        Redemption!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...