我的问题基本上是this previous question的'Q2'中被问及(而非回答)的问题。
我有一个结构化数组,其中包含一列字符串和一列整数。我使用dict用整数替换字符串,但因为该列的类型未更改,所以整数记录为字符串。我可以将列的dtype更改为整数,但是然后所有字符串都将转换为0,而不是每个字符串中的整数值。如何更改列,以便在dtype转换期间不会丢失整数值?
我创建了一个说明性示例:
dat = np.array([('1', 3392),('2', 4159),('1', 1093),('1', 9836)], dtype=[('code', 'U24'),('id', 'i2')])
dat.astype(dtype=[('code', 'i4'), ('id', 'i2')])
但由于我无法理解的原因,这实际上有效,产生了:
array([(1, 3392), (2, 4159), (1, 1093), (1, 9836)],
dtype=[('code', '<i4'), ('id', '<i2')])
这就是我想要的!相反,出于某种原因,我得到相当于:
array([(0, 3392), (0, 4159), (0, 1093), (0, 9836)],
dtype=[('code', '<i4'), ('id', '<i2')])
什么可能导致所有'代码'值被清零,如果事实上,这不是ndarray.astype
的预期结果?谢谢。 (如果它是相关的,我使用的是Python 3。)
编辑:以下是使用dict处理后的实际数据的快照。
array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),...
('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
('2', 9932), ('1', 3044), ('1', 2769)],
dtype=[('name', '<U24'), ('id', '<i2')])
答案 0 :(得分:0)
我猜你正在这样做:
baddata = numpy.array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),
('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
('2', 9932), ('1', 3044), ('1', 2769)],
dtype=[('name', '<U24'), ('id', '<i2')])
baddata.astype([('code', 'i4')])
#>>> array([(0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,), (0,),
#>>> (0,), (0,)],
#>>> dtype=[('code', '<i4')])
当你打算这样做的时候:
baddata = numpy.array([('1', 2814), ('1', 1185), ('1', 6836), ('2', 7057), ('1', 5403),
('1', 1642), ('1', 3967), ('2', 7982), ('1', 6139), ('1', 9934),
('2', 9932), ('1', 3044), ('1', 2769)],
dtype=[('name', '<U24'), ('id', '<i2')])
baddata.astype([('name', 'i4')])
#>>> array([(1,), (1,), (1,), (2,), (1,), (1,), (1,), (2,), (1,), (1,), (2,),
#>>> (1,), (1,)],
#>>> dtype=[('name', '<i4')])
注意名称。