我想改变numpy列的数据类型,但当我替换原始的numpy列时,数据类型不会成功地更改。
虽然我已经更改了列的dtype,但为什么我想替换原始列时,它仍然是u32?
import numpy as np
arraylist =[(1526869384.273246, 0, 'a0'),
(1526869385.273246, 1, 'a1'),
(1526869386.273246, 2, 'a2'),
(1526869387.273246, 3, 'a3'),
(1526869388.273246, 4, 'a4'),
(1526869389.273246, 5, 'a5'),
(1526869390.273246, 6, 'a6'),
(1526869391.273246, 7, 'a7'),
(1526869392.273246, 8, 'a8'),
(1526869393.273246, 9, 'a9'),
(1526869384.273246, 0, 'a0'),
(1526869385.273246, 1, 'a1'),
(1526869386.273246, 2, 'a2'),
(1526869387.273246, 3, 'a3'),
(1526869388.273246, 4, 'a4'),
(1526869389.273246, 5, 'a5'),
(1526869390.273246, 6, 'a6'),
(1526869391.273246, 7, 'a7'),
(1526869392.273246, 8, 'a8'),
(1526869393.273246, 9, 'a9')]
array = np.array(arraylist)
array.dtype
dtype('<U32')
array[:,0]=array[:,0].astype("float64")
array[:,0].dtype
>>> dtype('<U32')
虽然我已经更改了列的dtype,但为什么我想替换原始列时,它仍然是u32?
np.array
会将最佳公共dtype
分配给整个数组,在这种情况下是字符串。一旦创建了该dtype
,它就被固定下来,不能通过简单的赋值进行更改。如果您必须混合浮点数和字符串,请考虑使用结构化数组或对象dtype
数组。但请注意,这些都会带来增加的处理成本。 - hpaulj