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

