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

构建RFM模型时遇类型错误:datetime与date无法执行减法运算

解决RFM模型中日期类型不匹配的减法错误

错误原因:latest_date是datetime.datetime类型,而数据框df里的created_at列是datetime.date类型,Python不支持这两种不同日期类型直接做减法运算。

以下是两种可行的解决方法:

方法一:将基准日期转为date类型

直接修改latest_date的定义,使用date类型替代datetime类型,和created_at列类型保持一致:

import datetime as dt
import pandas as pd

latest_date = dt.date(2022,6,30)
RFMScore = df.groupby('user_id').agg({'created_at': lambda x: (latest_date - x.max()).days, 'order_id': lambda x: len(x), 'total': lambda x: x.sum()})
RFMScore['created_at'] = RFMScore['created_at'].astype(int)
RFMScore.rename(columns={'created_at': 'Recency', 
                         'order_id': 'Frequency', 
                         'total': 'Monetary'}, inplace=True)

RFMScore.reset_index().head()
return df

方法二:将购买日期列转为datetime类型

在分组聚合前,先把created_at列转换为datetime类型,与latest_date类型统一,这种方法更适合后续需要处理时分秒的场景:

import datetime as dt
import pandas as pd

latest_date = dt.datetime(2022,6,30)
# 转换created_at列的类型为datetime
df['created_at'] = pd.to_datetime(df['created_at'])
RFMScore = df.groupby('user_id').agg({'created_at': lambda x: (latest_date - x.max()).days, 'order_id': lambda x: len(x), 'total': lambda x: x.sum()})
RFMScore['created_at'] = RFMScore['created_at'].astype(int)
RFMScore.rename(columns={'created_at': 'Recency', 
                         'order_id': 'Frequency', 
                         'total': 'Monetary'}, inplace=True)

RFMScore.reset_index().head()
return df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:25:36