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

NumPy中使用stack堆叠多类型数组时如何保留各数组原数据类型

NumPy堆叠不同类型数组时类型自动转换问题

问题复现

使用NumPy做数组堆叠操作时,编写代码如下:

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5, 6, 7])
arr2 = np.array(['n', 'b', 'c', 'y', 'f', 'j', 'p'])

l = np.stack((arr1, arr2), axis=1)
print(l)

运行上述代码后,原整数类型数组的元素被自动转换为字符串类型,与输入类型不一致,实际运行输出:
当前运行输出

期望堆叠后的数组保留输入数组的原始类型:整数元素保持整数类型、字符串元素保持字符串类型,预期输出效果:
预期输出

原因说明

NumPy默认的ndarray是同质数组,要求数组内所有元素为统一数据类型。当通过np.stack拼接整数、字符串两种不同数据类型的数组时,NumPy会自动执行类型提升规则,将所有元素转换为兼容性更高的字符串类型,最终导致整数被强制转换为字符串。

解决方案

使用NumPy结构化数组即可实现不同字段独立指定数据类型,保留各数组原始类型,参考代码如下:

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5, 6, 7])
arr2 = np.array(['n', 'b', 'c', 'y', 'f', 'j', 'p'])

# 初始化结构化数组,分别指定两列的字段名和对应数据类型
stacked_res = np.empty(len(arr1), dtype=[("int_col", int), ("str_col", "U1")])
stacked_res["int_col"] = arr1
stacked_res["str_col"] = arr2
print(stacked_res)

运行上述代码得到的结果中,整数列保持int类型、字符串列保持str类型,与预期输出完全一致。

如果日常需要频繁处理多类型列的类表格数据,也可以直接使用pandas的DataFrame结构,天然支持每列独立数据类型,无需手动定义结构化数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:39:14