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
相关产品推荐
相关产品推荐

