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
相关产品推荐
相关产品推荐

