0

我的问题本质上是上一个问题的“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。)

编辑:这是使用字典处理后的实际数据的快照。

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')])
4

1 回答 1

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

注意名称

于 2013-09-26T00:21:12.750 回答