将numpy数组中特定列的数据类型转换

5
我想改变numpy列的数据类型,但当我替换原始的numpy列时,数据类型不会成功地更改。
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?

请阅读以下链接:https://dev59.com/YKrka4cB1Zd3GeqPen9R#49751834 和 https://dev59.com/Emgu5IYBdhLWcg3wdG2o?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa。 - Mazdak
作为默认值,np.array会将最佳公共dtype分配给整个数组,在这种情况下是字符串。一旦创建了该dtype,它就被固定下来,不能通过简单的赋值进行更改。如果您必须混合浮点数和字符串,请考虑使用结构化数组或对象dtype数组。但请注意,这些都会带来增加的处理成本。 - hpaulj
由于您有一个元组列表,创建一个具有3个字段的结构化数组将相对容易。 - hpaulj
1个回答

6

如果您可以接受命名列,那么您可以在创建期间定义一个数据类型元组并将其分配给array:

dtype = [('A', 'float'), ('B', 'int'), ('C', '<U32')]
array = np.array(arraylist, dtype=dtype)

array['A'].dtype  # note, array[: 0] does not work here since these are named columns
dtype('float64')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接