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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:05:17