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

如何为DataFrame出生日期列计算年龄并处理缺失/未知值?

我来帮你搞定这个年龄计算的问题!你遇到的核心问题是没法直接处理NOT KNOWN和空值的情况,导致公式运行报错对吧?下面是完整的解决方案,一步步来:

解决方案

1. 先准备好环境与测试数据

首先确保导入必要的模块,同时还原你的示例DataFrame:

import pandas as pd
import numpy as np
from datetime import datetime

# 构造你的示例DataFrame
df = pd.DataFrame({
    "Date of birth": [
        "1957-04-30", 
        "1966-11-10", 
        "1966-11-10", 
        "NOT KNOWN", 
        "1958-10-28", 
        "1958-06-04",
        None  # 模拟空值情况
    ]
})

# 定义参考日期并转换为datetime对象
referencePeriodEndDate = "2017-03-31"
ref_date = datetime.strptime(referencePeriodEndDate, "%Y-%m-%d")

2. 处理出生日期列,统一格式

先把Date of birth列转换成标准日期格式,同时把NOT KNOWN和空值转为缺失值(NaN),这样后续判断更方便:

# 转换日期列,errors='coerce'会把无效值(比如NOT KNOWN、空值)转为NaN
df["Date of birth"] = pd.to_datetime(df["Date of birth"], errors="coerce")

3. 计算年龄并处理缺失值

用np.where做条件判断:有效日期就按公式计算年龄,缺失值就返回NOT KNOWN。这里还可以按需保留小数位数:

# 计算年龄,保留1位小数(可根据需求调整)
df["Age"] = np.where(
    df["Date of birth"].notna(),  # 判断是否是有效日期
    round((ref_date - df["Date of birth"]).dt.days / 365.25, 1),  # 计算年龄
    "NOT KNOWN"  # 无效值返回指定字符串
)

关键逻辑解释

  • pd.to_datetime(..., errors='coerce'):把所有非日期格式的内容(包括NOT KNOWN和空值)统一转为NaN,让后续的条件判断更简洁。
  • (ref_date - df["Date of birth"]).dt.days:日期相减得到时间差对象,用.dt.days提取具体天数,才能做除法计算年龄。
  • np.where:比循环或apply更高效的矢量判断,适合批量处理DataFrame数据。

最终结果

运行后你的DataFrame会变成这样:

Date of birth      Age
0    1957-04-30     59.9
1    1966-11-10     30.4
2    1966-11-10     30.4
3           NaN  NOT KNOWN
4    1958-10-28     58.4
5    1958-06-04     58.8
6           NaN  NOT KNOWN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:07:59