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

如何在Pandas中根据年龄字段插补近似出生日期

出生日期缺失值插补方案

完全可以实现你描述的插补逻辑,且更推荐使用pandas向量化操作替代逐行遍历,执行效率更高,具体实现步骤如下:

步骤1:定义基准日期

先将基准更新日期转为pandas datetime格式,方便后续日期运算:

import pandas as pd
last_updated_date = pd.to_datetime("2021-05-31")

步骤2:针对DOB为空的行做定向插补

有两种常用的插补逻辑,可根据你的需求选择:

方案A:按平均年长度计算近似出生日期

直接用时间差计算,pandas会按每年平均365.25天做换算,得到的是粗略出生日期:

df.loc[df['DOB'].isna(), 'DOB'] = last_updated_date - pd.to_timedelta(df.loc[df['DOB'].isna(), 'AGE_YEARS'], unit='Y')

方案B:保留基准日月日,仅减去年龄对应的年份

如果希望插补的出生日期月日和基准日一致,结果更规整,可以用下面的写法:

df.loc[df['DOB'].isna(), 'DOB'] = df.loc[df['DOB'].isna()].apply(
    lambda x: last_updated_date.replace(year=last_updated_date.year - int(x['AGE_YEARS'])),
    axis=1
)

插补后的结果示例

以你给出的测试数据为例,id=02的行插补后结果如下:

idDOBAGE_YEARS
011992-06-1029
031991-01-1030
022016-05-315

补充说明

不推荐手动逐行遍历DataFrame(比如用iterrows()、for循环遍历行)处理:当数据量超过1万条时,逐行操作的性能会比上述向量化操作低几十到上百倍,优先使用pandas内置的批量操作方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:27:00