numpy Python将字符串和int转换为未知但给定的数据类型

y1aodyip  于 2023-06-06  发布在  Python
关注(0)|答案(1)|浏览(134)

我有一个赋值,我得到一个元组列表,其中包含数字字符串,int或float例如,我得到一个包含(ID,Class,Grade,Height)的元组:

A = [('123121','24',23,12.0),(23667,64,78,15.5)]

我还得到了一个元组列表,这样每个元组就包含了我想要转换的东西,以及要转换成什么。例如,我得到这个列表:
types=[('ID','int'),(grade,'S15'),('height','float'),('class','int')]
现在,我不知道类型元组中的每个值是什么,它可能是int,float,dtype,无论什么。我搜索了一下,发现了这段代码:

from typing import TypeVar, Type

T = TypeVar('T')

def cast(input, cast_type: Type[T]):
    casted_value = cast_type(input)
    return casted_value

它似乎对int,float,string很好,但对于S15,这是一个numpty dtype,它不工作,我得到错误:

casted_value = cast_type(input)
TypeError: Preliminary-API: Flexible/Parametric legacy DType '<class 'numpy.dtype[bytes_]'>' can only be instantiated using `np.dtype(...)`

在我的例子中,转换后打印A后的输出应该是:

A = [(123121,b'24',23.0,12),(23667,b'64',78.0,15)]

如何将某个数据类型转换为给定但未知数据类型?

zqdjd7g9

zqdjd7g91#

我不知道你想要什么,但是下面是如何用这个元组列表和dtype规范来创建一个structured array

In [90]: A = [('123121','24',23,12.0),(23667,64,78,15.5)]

In [92]: types=[('ID','int'),('grade','S15'),('height','float'),('class','int')]

使用匹配的元组列表,基本的array函数产生:

In [93]: arr = np.array(A, dtype=types)

它的完整repr显示是:

In [94]: arr
Out[94]: 
array([(123121, b'24', 23., 12), ( 23667, b'64', 78., 15)],
      dtype=[('ID', '<i4'), ('grade', 'S15'), ('height', '<f8'), ('class', '<i4')])

更紧凑的str

In [95]: print(arr)
[(123121, b'24', 23., 12) ( 23667, b'64', 78., 15)]

这是(2,)形数组,有4个字段。arr[0]得到一条记录。arr['height']获取一个字段。

相关问题