Использование регулярных выражений для создания нового столбца в кадре данных - PullRequest
0 голосов
/ 25 марта 2020

У меня есть фрейм данных, и в одном из его столбцов мне нужно вытащить указанный c текст и поместить его в свой собственный столбец. Из приведенного ниже кадра данных мне нужно взять элементы столбца LAUNCH и добавить его в свой собственный столбец рядом с ним, в частности, мне нужно извлечь дату в строках, которые ее предоставляют, например 'Mar-24'.

df =

 |LAUNCH               
0|Step-up Mar-24:x1.5    
1|unknown                 
2|NTV:62.1%               
3|Step-up Aug-23:N/A,

Мне бы хотелось, чтобы результат был примерно таким:

df =

 |LAUNCH               |DATE 
0|Step-up Mar-24:x1.5  | Mar-24 
1|unknown              | nan  
2|NTV:62.1%            | nan  
3|Step-up Aug-23:N/A,  | Aug-23

И если бы это можно было сделать, было бы также можно отображать дату как 24-03-01 (гггг-мм-дд) вместо 24 марта.

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Используйте str.extract с именованной группой захвата. Код для добавления нового столбца с результатом извлечения может быть, например:

df = pd.concat([df, df.LAUNCH.str.extract(
    r'(?P<DATE>(?:Jan|Feb|Ma[ry]|Apr|Ju[nl]|Aug|Sep|Oct|Nov|Dec)-\d{2})')], 
    axis=1, sort=False)

Результат для ваших данных:

                LAUNCH    DATE
0  Step-up Mar-24:x1.5  Mar-24
1              unknown     NaN
2            NTV:62.1%     NaN
3  Step-up Aug-23:N/A,  Aug-23
0 голосов
/ 25 марта 2020

Одним из способов является использование str.extract для поиска любого совпадения в день месяца:

months = (pd.to_datetime(pd.Series([*range(1,12)]), format='%m')
          .dt.month_name()
          .str[:3]
          .values.tolist())

pat = rf"((?:{'|'.join(months)})-\d+)"
# '((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov)-\\d+)'

df['DATE '] = df.LAUNCH.str.extract(pat)

print(df)

         LAUNCH          DATE 
0  Step-up Mar-24:x1.5  Mar-24
1              unknown     NaN
2            NTV:62.1%     NaN
3   Step-up Aug-23:N/A  Aug-23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...