Pandas 2.0按周分组求和报错:datetime类型相加不支持
问题解决:Pandas 2.0按周分组求和报错的修复
错误原因
你的代码在Pandas 2.0中报错,是因为groupby.sum()会尝试对所有列(包括datetime类型的date列)执行求和操作,而datetime类型不支持加法运算。旧版本Pandas可能默认忽略了datetime列的求和,但2.0版本变得更严格,直接抛出类型错误。
修复方案
方案1:直接指定分组键(推荐)
先将date列转为datetime类型,然后通过pd.Grouper指定分组键为date,避免保留重复的datetime列导致求和冲突:
import pandas as pd # 转换date列为datetime类型 articles_df['date'] = pd.to_datetime(articles_df['date']) # 按周分组求和 by_week_df = articles_df.groupby(pd.Grouper(key='date', freq='1W')).sum().reset_index()
方案2:指定聚合的数值列
如果坚持使用set_index的方式,需要明确指定只对数值列(in_count和out_count)求和,跳过datetime类型的列:
import pandas as pd articles_df['date'] = pd.to_datetime(articles_df['date']) by_week_df = articles_df.set_index('date').groupby(pd.Grouper(freq='1W'))[['in_count', 'out_count']].sum().reset_index()
方案3:设置索引时删除原date列
在set_index时添加drop=True参数,移除原有的date列,这样求和时就不会包含datetime类型数据:
import pandas as pd articles_df['date'] = pd.to_datetime(articles_df['date']) by_week_df = articles_df.set_index('date', drop=True).groupby(pd.Grouper(freq='1W')).sum().reset_index()
验证结果
执行任意一种方案后,都会得到按周聚合的结果,示例输出大致如下:
date in_count out_count 0 2013-01-06 1.0 0.0 1 2013-03-10 1.0 0.0 2 2013-04-14 1.0 0.0 3 2013-04-28 1.0 0.0 4 2013-05-12 0.0 1.0
内容的提问来源于stack exchange,提问作者Fermin Pitol
相关产品推荐
相关产品推荐

