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