You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则将pandas日期列拆分为start和end两列

实现方案

你可以通过str.findall匹配所有符合dd.mm.yyyy格式的日期,再按提取结果的长度分别赋值给start和end列即可,无需复杂的正则分组适配不同分隔符:

完整可运行代码

import pandas as pd

# 构造示例数据
df = pd.DataFrame({'dates': ['start 01.01.2020',                     
                        'start 10.10.2019, end 20.20.2019', 
                        '01.05.2019',                            
                        '01.11.2019-04.11.2019']})

# 提取所有符合dd.mm.yyyy格式的独立日期,返回每行的日期列表
date_list = df['dates'].str.findall(r'\b\d{2}\.\d{2}\.\d{4}\b')

# 赋值start和end列:只有一个日期时首尾取值相同
df['start'] = date_list.str[0]
df['end'] = date_list.str[-1]

# 可选:将字符串转为标准datetime格式,非法日期(如示例中的20.20.2019)会转为NaT
df['start'] = pd.to_datetime(df['start'], format='%d.%m.%Y', errors='coerce')
df['end'] = pd.to_datetime(df['end'], format='%d.%m.%Y', errors='coerce')

print(df)

输出结果

datesstartend
start 01.01.20202020-01-012020-01-01
start 10.10.2019, end 20.20.20192019-10-10NaT
01.05.20192019-05-012019-05-01
01.11.2019-04.11.20192019-11-012019-11-04

逻辑说明

  • 正则\b\d{2}\.\d{2}\.\d{4}\b自动过滤start、end、逗号、横杠等无关字符,只匹配符合格式的日期
  • 当行内仅提取到1个日期时,str[0]和str[-1]取值完全相同,自动满足仅含起始日期时start和end一致的要求
  • 如果需要保留原始字符串格式的日期,去掉pd.to_datetime转换步骤即可

内容的提问来源于stack exchange,提问作者user3306199

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:18:05