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

groupby后调用mean报错No numeric types to aggregate的问题排查

问题根源:data1列的数据类型错误

你遇到的DataError: No numeric types to aggregate错误,核心原因是第二个DataFrame的data1列是object类型(非数值型),而pandas的mean()聚合函数只能处理数值类型数据。

为什么会出现这个差异?

我们来对比两种DataFrame的构造方式:

  1. 第一个成功的例子:
    你直接传入data1: 1+0.1*numpy.arange(1,6),pandas会自动识别这是一个numpy浮点数组,将data1列设置为float64类型(可以用df.dtypes查看验证)。

  2. 第二个出错的例子:
    你先把日期数组和数值数组合并成了一个numpy数组:

    datedat = numpy.array([date_range_1(datetime.datetime(2015, 1, 17),5),1+0.1*numpy.arange(1,6)]).T
    

    由于这个数组同时包含datetime对象和浮点数值,numpy会将整个数组的 dtype 设为object(通用对象类型)。当你取datedat[:,1]作为data1列传入DataFrame时,这些数值依然以object类型存储,而非浮点型——这就导致聚合时找不到可计算的数值类型。

解决方法

这里有两种简单的修复方式:

方法1:避免构造numpy object数组,直接分列传入DataFrame

跳过合并numpy数组的步骤,像第一个例子那样直接传入各列数据,确保data1是数值类型:

dates = date_range_1(datetime.datetime(2015, 1, 17),5)
data = 1+0.1*numpy.arange(1,6)
years = [day.year for day in dates]
months = [day.month for day in dates]

datedatF = pandas.DataFrame({
    'key1': dates,
    'key2': numpy.array(years)*1000 + numpy.array(months),
    'data1': data
})

方法2:将data1列转换为数值类型

如果要保留当前的构造流程,只需在groupby前把data1列转为浮点型:

# 转换data1为数值类型
datedatF['data1'] = pandas.to_numeric(datedatF['data1'])
# 再执行groupby和聚合
grouped2 = datedatF['data1'].groupby(datedatF['key2'])
print(grouped2.mean())

额外优化:简化key2的生成

你可以利用pandas的datetime属性直接生成年份+月份的key,代码更简洁且不易出错:

datedatF['key2'] = datedatF['key1'].dt.year * 1000 + datedatF['key1'].dt.month

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:17:45