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

如何将Dataset中的相对日期转换为Month-Year格式?

处理相对日期转Month-Year格式的高效方法

不用自己写复杂的条件判断,Python里有几个现成的库能高效解决这个问题,下面是两种实用方案:

方案一:python-dateutil + Pandas

python-dateutil的relativedelta能完美处理月份、天数的时间偏移,不用手动考虑不同月份天数差异的问题,结合Pandas可以快速批量转换。

  1. 先安装依赖:
pip install python-dateutil pandas
  1. 代码示例:
import pandas as pd
from dateutil.relativedelta import relativedelta
from datetime import datetime

# 模拟你的数据集
df = pd.DataFrame({'date_col': ['2 Months Ago', '28 Days Ago', 'Feb-2023', 'Apr-2024']})

def parse_relative_date(date_str):
    if 'Ago' in date_str:
        num, unit, _ = date_str.split()
        num = int(num)
        # 根据单位计算目标日期
        if unit.startswith('Month'):
            target_dt = datetime.now() - relativedelta(months=num)
        elif unit.startswith('Day'):
            target_dt = datetime.now() - relativedelta(days=num)
        # 转成Month-Year格式(比如Jan-2024)
        return target_dt.strftime('%b-%Y')
    # 已经是目标格式的直接返回
    return date_str

# 批量应用转换
df['formatted_date'] = df['date_col'].apply(parse_relative_date)

方案二:Arrow库(更简洁)

Arrow是一个更人性化的日期处理库,自带相对日期解析能力,代码会更简洁。

  1. 安装依赖:
pip install arrow pandas
  1. 代码示例:
import pandas as pd
import arrow

def parse_relative_date(date_str):
    if 'Ago' in date_str:
        num, unit, _ = date_str.split()
        # 构造偏移参数,比如{'month': -2}或{'day': -28}
        shift_args = {unit.lower().rstrip('s'): -int(num)}
        target_dt = arrow.now().shift(**shift_args)
        return target_dt.format('MMM-YYYY')
    return date_str

df['formatted_date'] = df['date_col'].apply(parse_relative_date)

优化提示

如果你的数据集非常大,apply的效率可能不够,可以考虑用矢量化操作优化:

  • 先筛选出包含"Ago"的行单独处理,剩下的直接保留
  • 用pd.to_datetime配合errors='coerce'标记需要转换的行,再批量处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:25