使用正则表达式在dataframe中创建新列

2024-05-29 01:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,在它的一列中,我需要提取特定的文本并将其放入自己的列中。从下面的数据框中,我需要获取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(yyyy-mm-dd)而不是3月24日


Tags: 数据文本元素dataframedfdatestepnan
2条回答

一种方法是使用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

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

相关问题 更多 >

    热门问题