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

修改正则提取Pandas数据框多格式日期并排除误匹配的方法

解决Pandas中多格式日期范围提取问题

一、正则表达式调整方案

原正则的两个核心问题:

  • 未覆盖日+月份全称/缩写+年的日期格式(如31 september 2022)
  • 对纯数字短序列的匹配限制不足,导致误匹配16-17这类非日期内容

调整后的正则

\(?(?:(?:\b\d{1,2}\s+[A-Za-z]{3,9}\s+[12]\d{3})|(?:\b[A-Za-z]{3,9}\s*\d{1,2}(?:\/[12]\d{3})?)|(?:\d{1,2}\/\d{1,2}\/[12]\d{2,3}))\)?\s*(?:–|-|[Tt][Oo])\s*\(?(?:(?:\b\d{1,2}\s+[A-Za-z]{3,9}\s+[12]\d{3})|(?:\b[A-Za-z]{3,9}\s*\d{1,2}(?:\/[12]\d{3})?)|(?:\d{1,2}\/\d{1,2}\/[12]\d{2,3}))\)?|\(\s*[A-Za-z]{3,9}\s*[–-]\s*[A-Za-z]{3,9}\s*[12]\d{3}\s*\)

关键调整说明

  • 新增(?:\b\d{1,2}\s+[A-Za-z]{3,9}\s+[12]\d{3})分支,专门匹配“日 月份 年”的格式
  • 强化数字日期匹配规则:要求数字日期必须是带分隔符的日/月/年格式,或带月份的数字格式,避免单独两位数字被误匹配
  • 保留原有对带括号的月份范围格式(如(January--March 2023))的支持

二、更高效的非正则提取方案

正则维护成本高,推荐用python-dateutil的日期解析器结合Pandas处理,自动适配多格式同时过滤无效内容:

1. 安装依赖

pip install python-dateutil

2. 实现提取逻辑

import pandas as pd
from dateutil import parser
from dateutil.parser import ParserError

def extract_valid_date_ranges(text):
    if pd.isna(text):
        return None
    # 定义日期范围的分隔符集合
    range_separators = ['–', '-', 'to', 'To']
    for sep in range_separators:
        if sep not in text:
            continue
        # 分割并清理括号、空格
        date_parts = [part.strip().strip('()') for part in text.split(sep)]
        if len(date_parts) != 2:
            continue
        try:
            # 严格解析日期,非日期内容会抛出异常
            start_date = parser.parse(date_parts[0], fuzzy=False)
            end_date = parser.parse(date_parts[1], fuzzy=False)
            # 返回标准化日期元组
            return (start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))
        except ParserError:
            # 解析失败则跳过当前分隔符
            continue
    return None

# 应用到DataFrame的目标列
df['date_range'] = df['your_text_column'].apply(extract_valid_date_ranges)

方案优势

  • 自动支持几乎所有常见日期格式,无需手动调整正则
  • fuzzy=False参数确保只解析合法日期,直接过滤16-17这类无效内容
  • 解析后可直接转换为标准YYYY-MM-DD格式,方便后续数据分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:31:04