满足维度要求的数组用numpy vstack堆叠报invalid type promotion错误原因
错误成因
TypeError: invalid type promotion报错和数组维度、列数没有关系,核心原因是两个待拼接数组的数据类型(dtype)不兼容,numpy无法自动推断出可以安全容纳两种类型所有取值的公共数据类型,因此中断了拼接操作。
常见的不兼容场景包括:
- 一个数组是数值类型(int/float),另一个是字符串/object类型
- 一个数组是带单位的扩展数值类型,另一个是普通原生数值类型
- 一个数组是datetime类型,另一个是数值/字符串类型
你可以先执行以下代码查看两个数组的具体类型,确认不兼容的点:
print(Ne['State_1_spe_sum'].dtype) print(Ne['State_1_inc'].dtype)
解决方法
- 手动统一两个数组的数据类型后再执行拼接操作,比如确认两个数组都应该为数值类型时,统一转为float64即可:
np.vstack(( Ne['State_1_spe_sum'].astype(np.float64), Ne['State_1_inc'].astype(np.float64) ))
- 如果数组是从pandas中提取的object类型数值,建议先使用
pd.to_numeric处理异常值/缺失值后再转成标准数值类型,再执行堆叠。 - 如果涉及datetime、自定义结构体等特殊类型,需要先确认两类数据的逻辑兼容性,再手动指定统一的目标类型转换,避免numpy自动推断失败。
内容的提问来源于stack exchange,提问作者vlaaaaaddd
相关产品推荐
相关产品推荐

