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

如何在Pandas DataFrame列中提取字符串日期并处理特殊场景?

解决方案

自定义日期提取函数

要同时处理多日期提取和无日期的异常,你需要编写一个自定义函数,替代直接在apply中使用lambda:

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

def extract_all_dates(text, sep=', '):
    dates = []
    remaining_text = str(text).strip()
    
    while remaining_text:
        try:
            # 解析日期并获取剩余未解析的文本片段
            date_obj, tokens = parse(remaining_text, fuzzy_with_tokens=True)
            dates.append(str(date_obj))  # 若需仅保留日期部分,改用str(date_obj.date())
            # 更新剩余文本,继续查找下一个日期
            remaining_text = ''.join(tokens).strip()
        except ParserError:
            # 无更多可解析日期,终止循环
            break
    
    # 有日期则用分隔符连接,无日期则返回空值
    return sep.join(dates) if dates else pd.NA

应用到DataFrame

将函数直接应用到目标列即可:

df['Dates'] = df['Column to extract'].apply(extract_all_dates)

关键说明

  • 多日期处理:通过循环解析剩余文本,每次提取一个日期后,继续在剩下的内容中查找,直到无法解析为止,最后用指定分隔符(默认, )连接所有日期。
  • 异常处理:捕获ParserError,当字符串中无日期时返回pd.NA(可根据需求改为空字符串""),避免整个apply过程报错中断。
  • 原代码问题:你之前的代码直接返回了parse的元组结果(包含日期对象和剩余文本),且未处理多日期与异常,因此无法得到预期的日期字符串。

示例效果

假设你的DataFrame内容如下:

data = {
    'Column to extract': [
        'January 24, 1976 and March 15, 2020',
        'No date in this string',
        'Deadlines: 2023-10-05 and 11/20/2023'
    ]
}
df = pd.DataFrame(data)

运行代码后,df['Dates']的结果为:

Dates
1976-01-24 00:00:00, 2020-03-15 00:00:00
2023-10-05 00:00:00, 2023-11-20 00:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:41:32