我有一个关于Python中数据类型转换的新手问题:
假设我有一个np.array对象为:
X = np.array([[1.,2.,0.5,2.],[2.,3.,0.7,2.],[3.,2.,0.65,1.]])
我想使用以下语法将[0,1,3]
列中的每个值转换为整数格式:
Y = np.array(map(tuple,X),dtype=[('col0',int),('col1',int),('col2',float),('col3',int)])
我对Y
的期望是与X
形状相同的数组,但是每个list元素都将转换为元组和每一列的对应数据类型,即
Y = np.array([(1,2,0.5,2),(2,3,0.7,2),(3,2,0.65,1)])
但是,我遇到了TypeError:需要一个类似字节的对象,而不是'map'
所以我有两个本地问题: 1)对输出Y的期望是否正确? 2)如何修复TypeError?
答案 0 :(得分:0)
首先,您对Y的期望是正确的,但是,如果您拥有大量不同数据类型的数组,则可能要考虑使用Pandas数据框,因为它以比直接得多的方式处理不同类型的列一个Numpy结构化数组。
第二,您的代码非常接近。 map
生成一个map
对象,而不是列表,并且正如TypeError所说,Numpy canot处理一个“ map”对象。简单的解决方案是用map()
将list()
包裹起来,创建一个元组列表:
Y = np.array(list(map(tuple,X)),dtype=[('col0',int),('col1',int),('col2',float),('col3',int)])
哪种产量:
array([(1, 2, 0.5 , 2), (2, 3, 0.7 , 2), (3, 2, 0.65, 1)],
dtype=[('col0', '<i8'), ('col1', '<i8'), ('col2', '<f8'), ('col3', '<i8')])