Pandas按1分钟间隔重采样计算均值触发DataError错误的求助
解决Resample Mean报错的问题
我来帮你搞定这个困扰!咱们先理清楚问题出在哪,再一步步解决:
为什么sum/min/max能跑但mean不行?
你所有列都是object类型(也就是字符串形式的数字),sum()、min()、max()这些聚合函数会自动尝试把字符串转成数值再计算,但mean()不一样——它需要明确的数值类型(int/float)才能完成除法运算,直接用就会触发DataError。
怎么正确转换数据类型?
你之前用pd.to_numeric(mdf)报错,是因为这个函数只能处理一维数据(比如单个Series、列表),不能直接喂整个DataFrame。正确的做法是给每一列单独转换:
方法一:用apply批量转换
# errors='coerce'会把无法转成数值的内容变成NaN,避免转换失败中断程序 mdf = mdf.apply(pd.to_numeric, errors='coerce')
方法二:循环逐列转换
如果你想更直观地控制每一列,也可以用循环:
for col in mdf.columns: # 对每一列应用pd.to_numeric转换 mdf[col] = pd.to_numeric(mdf[col], errors='coerce')
验证转换结果
转换完之后,记得检查一下数据类型是否正确:
print(mdf.dtypes)
正常情况下,所有列应该变成int64或者float64类型。
最后执行重采样mean
现在再跑重采样的均值计算就没问题了:
mdf = mdf.resample('1min').mean()
额外提醒
如果转换后出现了NaN值,说明原来的object列里有非数值的内容(比如空字符串、字母),你可以根据需求用mdf.fillna()来填充这些缺失值,比如用0或者该列的均值填充。
内容的提问来源于stack exchange,提问作者Riyad
相关产品推荐
相关产品推荐

