pandas 3.1 对数组列求 mean 报无法转成 numeric
一列 object 中每格保存 ndarray 时,pandas 3.1.0 的提前数值检查会拒绝数组对象。等长纯数值向量可先 stack 成二维数组,再明确沿行轴求均值。
DataFrame 一列的每个单元格都是 NumPy 数组,升级 pandas 3.1.0 后执行 df["a"].mean(),报 Could not convert array(...) to numeric,或在此前出现 only 0-dimensional arrays can be converted to Python scalars。先确认这列保存的是向量对象,而不是普通数值标量。
3.1.0 的数值归约会更早检查 object 数组里的元素。此前这类操作可能先把向量相加,再检查相加后的数值数组;现在会在求和之前看到“数组中的数组”,于是拒绝转换。单纯给原列改一个标量 dtype,未必能表达你想要的统计方式。
等长向量按位置求均值,先建立二维结构
如果每格都是形状相同的纯数值向量,业务要的是每个位置的均值,可以显式建立矩阵:
import numpy as np
import pandas as pd
values = pd.Series([np.array([1, 2, 3]), np.array([4, 5, 6])])
if values.empty:
raise ValueError("没有可求均值的向量")
matrix = np.stack(values.to_list(), axis=0)
mean_vector = matrix.mean(axis=0)
示例的目标结果是 [2.5, 3.5, 4.5]。axis=0 消去的是样本行,保留向量各位置;省略轴会得到整个矩阵的单个均值,不是原来的向量结果。
stack 要求形状一致。长度不同的数组不应为了让代码运行就自动补零,那会改变每个位置的样本量与统计含义。如果输入含缺失标量、非数值、复数或不同维度,应先按数据契约处理,再选择对应归约方式。
缺失值规则需要明确
matrix.mean() 不会自动沿用 pandas 原列的所有缺失值行为。确实需要忽略数值矩阵中的 NaN 时,应先确认这符合业务规则,再选择相应的 NumPy 归约;全部缺失的某一位置仍需要明确结果和告警处理。
也不要把数组先转成字符串再求均值,或把 object 列强制拍平成一维。前者破坏数值类型,后者把“每条记录中的第几个分量”混成了同一个统计总体。
检查时保留一个元素、多个等长向量、空输入和不等长输入,确认输出形状、轴与原业务一致。大数据还需评估堆叠矩阵的内存占用;这种方案让向量结构显式化,不意味着一次物化所有数据在任何规模都合适。


