如何从DataFrame行中提取MMDDYYYY格式日期并赋值给变量
提取DataFrame字符串中的MMDDYYYY日期并赋值变量
需求说明
从DataFrame的ID列中,提取每行第一个符合MMDDYYYY格式的日期(如01252023),并将第一个出现的日期赋值给变量,用于文件名拼接。
实现步骤
以下是基于Python和Pandas的具体实现代码:
- 导入库并构造示例DataFrame
import pandas as pd # 构造用户提供的示例数据 data = { 'ID': [ 'blah', 'unc.abc.155gdgeh0t4ngs8_XYZ_01252023_US_C_Home_en-us_RS_Nat\'l-vs-UNC', 'blah', 'unc.abc.52gst4363463463_RST_01272023_US_C_Away_en-us_RS_Nat\'l-vs-UNC', 'unc.abc.534gs23ujgf9d8f_UVX_02052023_US_C_Away_en-us_RS_TEST-vs-TEST', 'unc.abc.5830ugjshg5345s_AAA_11012023_CA_C_Home_en-us_RS_Reg-vs-HBS', 'unc.abc.fs44848fvs8gs82_MBB_12252023_US_C_Home_en-us_RS_Nat\'l-vs-UNC', 'unc.abc.fe0wjv-578244fs_FFS_04222023_CA_C_Away_en-us_RS_Nat\'l-vs-UNC' ] } df = pd.DataFrame(data)
- 用正则表达式提取日期
使用正则匹配MMDDYYYY格式的日期(确保月份为01-12,日期为01-31),提取每行第一个匹配结果:
# 正则表达式:匹配MMDDYYYY格式的日期 date_pattern = r'(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{4}' # 提取每行第一个匹配的日期,无匹配则返回NaN df['extracted_date'] = df['ID'].str.extract(date_pattern, expand=False)
- 获取第一个出现的日期并赋值变量
过滤空值后,取第一个非空的日期作为目标变量:
# 提取第一个出现的有效日期 first_appeared_date = df['extracted_date'].dropna().iloc[0] # 拼接文件名示例 output_filename = f'data_report_{first_appeared_date}.xlsx' print(output_filename) # 输出:data_report_01252023.xlsx
说明
- 正则表达式
date_pattern会精准匹配合法的MMDDYYYY日期,避免误提取其他8位数字串; - 如果不需要严格校验日期合法性,可简化正则为
r'\d{8}'(仅匹配8位数字); - 若需要处理所有行的日期,可直接使用
df['extracted_date']列,无需过滤取第一个值。
内容的提问来源于stack exchange,提问作者user53526356
相关产品推荐
相关产品推荐

