Python中的数据类型转换和地图对象错误,TypeError:需要一个类似字节的对象,而不是“地图”

时间:2019-11-27 00:13:03

标签: casting typeerror

我有一个关于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?

1 个答案:

答案 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')])