【问题标题】:Convert dtype of a specific column in a numpy array [duplicate]转换 numpy 数组中特定列的 dtype [重复]
【发布时间】:2023-03-04 14:26:02
【问题描述】:

我想改变numpy列的数据类型,但是当我替换原来的numpy列时,dtype不会成功改变。

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 数组。但请注意,这些会增加处理成本。
  • 既然你有一个元组列表,创建一个包含 3 个字段的结构化数组会相对容易。

标签: python arrays numpy types type-conversion


【解决方案1】:

如果您对命名列没问题,您可以定义一个 dtype 元组并在创建期间将它们分配给 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多