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

Pandas根据出生日期计算年龄时报strptime参数应为字符串而非float错误

代码问题及报错原因

你遇到的报错由两个问题共同导致:

  • 核心逻辑错误:你已经通过pd.to_datetime + .dt.date将D_O_B__c列的非空值转换为了Python原生date类型,strptime方法仅接收字符串类型的输入,你传入date对象本身就不符合参数要求
  • 空值影响:你设置了errors='coerce',无效/空缺位的出生日期会被转为NaT,再调用.dt.date后空值会变为NaN(浮点类型),这部分值传入strptime也会触发类型错误
  • 额外隐藏bug:你给final_df['Age']赋值时,调用的是df['D_O_B__c']而非final_df的对应列,可能会读取旧数据导致结果偏差

修复代码

直接简化年龄计算逻辑,新增空值判断即可,无需重复做日期解析:

from datetime import date
import pandas as pd

# 原有日期转换逻辑保留,无需修改
final_df['D_O_B__c'] = pd.to_datetime(final_df['D_O_B__c'], format = "%Y-%m-%d", errors = 'coerce')
final_df['D_O_B__c'] = final_df['D_O_B__c'].dt.date

def calculate_age(born):
    # 空值直接返回空,后续统一填充
    if pd.isna(born):
        return None
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

# 注意调用final_df的出生日期列,不要用df
final_df['Age'] = final_df['D_O_B__c'].apply(calculate_age)

# 按你的需求用年龄中位数填充空值
final_df['Age'] = final_df['Age'].fillna(final_df['Age'].median())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:39:02