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

使用Pandas重采样时出现DataError: No numeric types to aggregate错误的求助

解决重采样报错「DataError: No numeric types to aggregate」的问题

嘿,我来帮你拆解下这个问题~你遇到的报错核心其实有两个关键原因,咱们一个个说清楚:

1. 最可能的根源:value列并非数值类型

虽然你观察到数值列应该是数值格式,但Pandas大概率把它识别成了**字符串(object类型)**或者其他非数值类型,导致mean()聚合方法找不到可计算的数值列,自然就报错了。

排查方法:

先确认value列的数据类型,运行这两行代码就能清楚:

print(dataframe['value'].dtype)
# 或者查看整个DataFrame的详细信息
dataframe.info()

如果输出结果是object,那就坐实了这个问题。

解决方法:

把value列强制转换为数值类型,用pd.to_numeric()处理,同时通过errors='coerce'把无法转换的异常值(比如空字符串、特殊字符)转为NaN,不影响后续聚合计算:

# 注意:这一步要放在设置索引之前执行
dataframe['value'] = pd.to_numeric(dataframe['value'], errors='coerce')

2. 容易忽略的参数错误:重采样频率写错了!

你代码里的resample('1M')是**按月份(Month end)**重采样,完全不是你想要的1分钟粒度!如果要实现1分钟的时间聚合,应该用'1min'或者缩写'T':

# 正确的1分钟重采样写法二选一
dataframe_minutes = dataframe.resample('1min').mean()
# 或者用缩写形式
dataframe_minutes = dataframe.resample('T').mean()

修正后的完整代码

把两个问题都修复后,完整代码如下:

import pandas as pd

# 将字典列表转换为DataFrame
dataframe = pd.DataFrame(data)

# 先转换value列为数值类型(关键步骤)
dataframe['value'] = pd.to_numeric(dataframe['value'], errors='coerce')

# 将毫秒时间戳转换为datetime类型
dataframe['timestamp'] = pd.to_datetime(dataframe['timestamp'], unit='ms')

# 调整列顺序
dataframe = dataframe.reindex(['timestamp','value'], axis=1)

# 设置timestamp列为索引
dataframe.set_index('timestamp', inplace=True)

# 按1分钟粒度重采样并计算均值
dataframe_minutes = dataframe.resample('1min').mean()

这样应该就能顺利解决你的报错啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:42:27