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

基于Pandas的DOB列新增Age列时触发TypeError错误的排查

问题解决:DataFrame中计算客户年龄的报错修复及实现

错误原因分析

你遇到的TypeError: Invalid dtype object for __floordiv__报错主要有两个核心原因:

  1. DOB列数据类型不匹配:原始DOB列是字符串格式(如31.07.1983),而非datetime类型,无法直接执行时间运算。
  2. 运算逻辑顺序错误:代码中直接对users_pd["DOB"]与timedelta做除法是错误的,正确逻辑应为先计算当前日期与DOB的时间差,再用该差值除以年对应的timedelta。

解决方案

步骤1:将DOB列转换为datetime类型

首先需要把字符串格式的日期转为pandas可识别的datetime类型:

import pandas as pd
# 转换DOB列,指定日期格式为「日.月.年」
users_pd['DOB'] = pd.to_datetime(users_pd['DOB'], format='%d.%m.%Y')

步骤2:计算客户年龄(两种可选方法)

方法一:精确计算(考虑当年生日是否已过)

这种方法会根据当前日期判断客户当年生日是否已过,得到最准确的年龄:

today = pd.Timestamp.today()
# 先计算年份差
users_pd['Age'] = today.year - users_pd['DOB'].dt.year
# 筛选出当年生日未过的用户,年龄减1
mask = (today.month < users_pd['DOB'].dt.month) | ((today.month == users_pd['DOB'].dt.month) & (today.day < users_pd['DOB'].dt.day))
users_pd['Age'] -= mask.astype(int)

方法二:近似计算(基于总天数除以平均年天数)

如果不需要严格考虑生日是否已过,可以用时间差除以平均年天数(365.2425,适配闰年):

today = pd.Timestamp.today()
users_pd['Age'] = (today - users_pd['DOB']) // pd.Timedelta(days=365.2425)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:51:16