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

如何从DataFrame的字符串列中提取指定格式的日期

提取指定格式日期的解决方案

你之前用str.replace('\D+', '')会把所有非数字字符删掉——不仅会把带斜杠的日期变成无分隔符格式,还会把非日期的长数字(比如最后一行的11位数字)也保留下来,完全不符合提取日期的需求。可以用正则匹配+格式转换的方式精准解决:

步骤1:提取符合格式的日期字符串

用str.extract匹配两种目标日期格式(带斜杠的dd/mm/yyyy或无分隔符的ddmmyyyy),正则表达式可以精准覆盖这两种情况:

import pandas as pd

# 示例数据
data = {'description': ['A CAKE 01/02/1989', 'information 22031970', 'some text', 'values 12345678987']}
df = pd.DataFrame(data)

# 提取日期:只匹配dd/mm/yyyy或ddmmyyyy格式
df['extracted_date'] = df['description'].str.extract(r'(\d{2}/\d{2}/\d{4}|\d{8})')

这一步后,extracted_date列会得到:

extracted_date
01/02/1989
22031970
NaN
NaN

(最后一行的11位数字不符合8位/10位带斜杠的日期格式,会被自动排除)

步骤2:统一日期格式

把无分隔符的ddmmyyyy转换成标准的dd/mm/yyyy格式:

# 自定义函数处理日期格式
def format_date(date_str):
    if pd.isna(date_str):
        return date_str
    # 对8位无分隔符日期插入斜杠
    if len(date_str) == 8:
        return f"{date_str[:2]}/{date_str[2:4]}/{date_str[4:]}"
    return date_str

df['formatted_date'] = df['extracted_date'].apply(format_date)

最终结果:

descriptionextracted_dateformatted_date
A CAKE 01/02/198901/02/198901/02/1989
information 220319702203197022/03/1970
some textNaNNaN
values 12345678987NaNNaN

补充说明

  • 正则表达式(\d{2}/\d{2}/\d{4}|\d{8})确保只匹配符合日期长度的字符串,避免提取非日期的数字串。
  • 如果需要把NaN替换成空字符串或其他默认值,可添加:df['formatted_date'] = df['formatted_date'].fillna('')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:35:10