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

如何在Pandas中从datetime64[ns]类型出生日期列计算年龄?

解决从datetime64[ns]列计算年龄的TypeError问题

你遇到的这个TypeError很常见——因为你计算出来的age列是timedelta64[ns]类型(包含天、时、分、秒的时间差),这种类型没法直接用astype(int)转换为整数。咱们一步步来修正:

问题根源

你的代码里(now - clients["date_of_birth"])/365得到的是带时分秒的时间差对象,比如输出里的22624 days 11:35:15.057887,直接转int会被Python拒绝,因为它不知道该怎么把天时分秒的复合信息转成单一整数。

正确的解决方法

方法1:提取天数后计算年龄(最直观)

先通过.dt.days提取时间差中的纯天数,再用整数除法//计算完整的年份(避免小数,符合实际年龄的计算逻辑),最后转成int:

import pandas as pd
import datetime as DT

now = pd.Timestamp(DT.datetime.now())
# 提取天数 → 计算完整年份 → 转int
clients["age"] = ((now - clients["date_of_birth"]).dt.days // 365).astype(int)

比如你输出里的22624 days,22624//365 = 61,就是正确的年龄。

方法2:处理缺失值(如果有NaT)

如果你的date_of_birth列有缺失值(输出里的NaT),可以用fillna填充默认值,或者用dropna删除对应行:

# 填充缺失值为0,再转int
clients["age"] = ((now - clients["date_of_birth"]).dt.days // 365).fillna(0).astype(int)

# 或者直接删除有缺失值的行
clients = clients.dropna(subset=["date_of_birth"])
clients["age"] = ((now - clients["date_of_birth"]).dt.days // 365).astype(int)

方法3:用dt.total_seconds()换算(备选)

如果你想更精确地计算(比如包含部分年份的小数),可以把时间差转成总秒数,再换算成年份:

clients["age"] = ((now - clients["date_of_birth"]).dt.total_seconds() / (365*24*3600)).astype(int)

不过这种方法和方法1的结果几乎一致,方法1更简洁。

验证效果

修正后,你的age列会变成纯整数,比如:

0    0
1    61
2    50
3    40
4    59
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:35:53