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

如何用Python Pandas基于日期计算年龄?解决数据类型错误

解决Pandas计算年龄的日期处理问题

嘿,我明白你现在的困扰——处理日期格式和计算年龄确实容易踩坑,我来一步步帮你理顺:

第一步:确保日期列被正确解析为datetime类型

你提到用parse_dates=['date']没成功,大概率是列名大小写不匹配(你的CSV里列名是Date,大写D),或者日期格式存在异常值。试试下面的方法:

import pandas as pd

# 方法1:读取时指定正确的列名解析日期
df = pd.read_csv('your_data.csv', parse_dates=['Date'])

# 检查解析结果:如果输出是datetime64[ns]就说明成功了
print(df['Date'].dtype)

# 如果方法1失败,用pd.to_datetime强制转换(处理格式异常)
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d', errors='coerce')
# 这里errors='coerce'会把无效日期转成NaT,之后你可以用df.dropna()清理这些行

第二步:正确计算年龄(避免闰年/生日未到的误差)

直接将日期相减得到的是Timedelta类型,不能直接转成数值年龄,而且除以365会忽略闰年和“还没到当年生日”的情况。推荐两种靠谱的方法:

方法A:用dateutil的relativedelta(最精准)

from dateutil.relativedelta import relativedelta

today = pd.Timestamp.now()
df['Age'] = df['Date'].apply(lambda birth_date: relativedelta(today, birth_date).years)

方法B:纯Pandas实现(无需额外库)

today = pd.Timestamp.today()

# 先计算年份差
df['Age'] = today.year - df['Date'].dt.year

# 调整:如果今年还没到生日,年龄减1
df['Age'] -= ((today.month, today.day) < (df['Date'].dt.month, df['Date'].dt.day)).astype(int)

为什么你之前的方法行不通?

你尝试用pd.to_numeric转换日期列是错误的——日期本质是datetime对象,不是数值类型,转数值只会把它变成时间戳(或者报错/变成NaN),完全不是你需要的处理方式。核心是先把Date列转换成datetime类型,再基于时间对象做年龄计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:05:46