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

如何从给定输入提取日期及在DataFrame中创建日期格式列

嘿,我来帮你搞定这两个日期处理的问题,都是日常数据工作里高频遇到的场景!

问题1:如何从给定输入中提取日期?

提取日期的方法取决于你的输入类型(纯文本、结构化数据等)和日期格式的规范程度,这里给你几个常用的方案:

  • 通用文本提取(自动识别多种格式):
    如果你的输入是自由文本,里面混着各种格式的日期,用dateutil.parser会非常省心——它能自动识别绝大多数常见的日期格式。
    先安装依赖:

    pip install python-dateutil
    

    示例代码:

    from dateutil.parser import parse
    
    input_text = "项目截止日期是2024年5月15日,备选时间为下周二(6月4日)"
    extracted_dates = []
    # 拆分文本尝试解析每个部分
    for segment in input_text.split():
        try:
            # fuzzy=True忽略非日期字符,只提取有效日期部分
            date_obj = parse(segment, fuzzy=True)
            extracted_dates.append(date_obj.date())
        except ValueError:
            # 解析失败就跳过该片段
            continue
    print(extracted_dates)  # 输出: [datetime.date(2024, 5, 15), datetime.date(2024, 6, 4)]
    
  • 固定格式文本提取(精准匹配):
    如果你的日期格式是固定的(比如YYYY-MM-DD、MM/DD/YYYY),用正则表达式提取会更高效准确:

    import re
    
    input_text = "订单创建时间:2024-03-20,预计发货时间:2024/04/05"
    # 匹配YYYY-MM-DD格式的正则
    date_pattern = r'\d{4}-\d{2}-\d{2}'
    # 匹配MM/DD/YYYY格式的正则可以用r'\d{2}/\d{2}/\d{4}'
    matched_dates = re.findall(date_pattern, input_text)
    print(matched_dates)  # 输出: ['2024-03-20']
    
  • 结构化数据(比如Pandas列)提取:
    如果你的数据存在Pandas的字符串列里,直接用pd.to_datetime()就能一键转换,还能处理格式不统一的情况:

    import pandas as pd
    
    df = pd.DataFrame({'raw_date': ['2024/05/10', 'May 20, 2024', '2024-06-01', '无效日期']})
    # errors='coerce'会把无法解析的内容转为NaT(缺失值)
    df['extracted_date'] = pd.to_datetime(df['raw_date'], errors='coerce')
    print(df)
    
问题2:将DataFrame的Month、Year、Day列合并为Date列

这个需求用Pandas可以非常简洁地实现,核心就是用pd.to_datetime()函数,它支持直接接收包含年、月、日信息的列组合。

先看示例场景:

import pandas as pd

# 构建你的示例DataFrame
data = {
    'Month': [5, 6, 7],
    'Year': [2024, 2024, 2024],
    'Day of the month': [15, 1, 22]
}
df = pd.DataFrame(data)

方法1:直接传入列组合

pd.to_datetime()会自动识别列名中的Year、Month、Day关键词,直接传入对应列即可:

df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day of the month']])

方法2:明确指定年/月/日对应列(更稳妥)

如果你的列名不是标准的Year/Month/Day(比如这里的"Day of the month"),也可以通过字典明确映射,避免歧义:

df['Date'] = pd.to_datetime(
    dict(
        year=df['Year'],
        month=df['Month'],
        day=df['Day of the month']
    )
)

执行完后,你的DataFrame会新增一个datetime类型的Date列,结果如下:

Month  Year  Day of the month       Date
0      5  2024                15 2024-05-15
1      6  2024                 1 2024-06-01
2      7  2024                22 2024-07-22

注意:如果你的Month是英文月份名称(比如"May"),pd.to_datetime()也能自动识别,不需要额外转换哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:54