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

Python中将Object类型转为datetime及计算日期差求年数

不同格式日期转datetime及年数差计算方案

1. 转换birth_date列

birth_date是日/月/年格式(如22/7/1998),用pd.to_datetime()指定格式精准转换:

import pandas as pd

df['birth_date'] = pd.to_datetime(df['birth_date'], format='%d/%m/%Y')

2. 转换consultation_timestamp列

该列是带时区的ISO格式(如2017-09-27t13:47+00:00),pd.to_datetime()可直接识别,若需统一时区(比如移除时区信息避免后续冲突),可额外处理:

df['consultation_timestamp'] = pd.to_datetime(df['consultation_timestamp'])
# 可选:转UTC后移除时区
df['consultation_timestamp'] = df['consultation_timestamp'].dt.tz_convert(None)

3. 计算年数差

直接相减得到天数,用relativedelta能精确计算周岁差:
先安装依赖(未安装时执行):

pip install python-dateutil

然后计算:

from dateutil.relativedelta import relativedelta

# 逐行计算年数差
df['age_at_consult'] = df.apply(
    lambda row: relativedelta(row['consultation_timestamp'], row['birth_date']).years,
    axis=1
)

如果不想用额外依赖,也可以用向量操作实现:

# 提取日期组件
birth_ymd = df['birth_date'].dt
consult_ymd = df['consultation_timestamp'].dt

# 基础年数差
age = consult_ymd.year - birth_ymd.year
# 修正未过生日的情况
mask = (consult_ymd.month < birth_ymd.month) | \
       ((consult_ymd.month == birth_ymd.month) & (consult_ymd.day < birth_ymd.day))
age[mask] -= 1

df['age_at_consult'] = age

注意事项

  • 不要用pd.datetime,该API已被弃用,官方推荐使用pd.to_datetime()。
  • 指定format参数不仅能提升转换效率,还能避免格式歧义(比如10/9/2023可能被误判为月/日/年)。
  • 若两个日期时区不同,必须先统一时区再计算,否则会抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:16