如何将Dataset中的相对日期转换为Month-Year格式?
处理相对日期转Month-Year格式的高效方法
不用自己写复杂的条件判断,Python里有几个现成的库能高效解决这个问题,下面是两种实用方案:
方案一:python-dateutil + Pandas
python-dateutil的relativedelta能完美处理月份、天数的时间偏移,不用手动考虑不同月份天数差异的问题,结合Pandas可以快速批量转换。
- 先安装依赖:
pip install python-dateutil pandas
- 代码示例:
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是一个更人性化的日期处理库,自带相对日期解析能力,代码会更简洁。
- 安装依赖:
pip install arrow pandas
- 代码示例:
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
相关产品推荐
相关产品推荐

