首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么numpy数组列数据类型没有更新?

为什么numpy数组列数据类型没有更新?
EN

Stack Overflow用户
提问于 2018-07-12 02:06:06
回答 2查看 427关注 0票数 0
代码语言:javascript
复制
nd2values[:,[1]]=nd2values[:,[1]].astype(int)
nd2values

输出

代码语言:javascript
复制
array([['021fd159b55773fba8157e2090fe0fe2', '1',
        '881f83d2dee3f18c7d1751659406144e',
        '012059d397c0b7e5a30a5bb89c0b075e', 'A'],
       ['021fd159b55773fba8157e2090fe0fe2', '1',
        'cec898a1d355dbfbad8c760615fde1af',
        '012059d397c0b7e5a30a5bb89c0b075e', 'A'],
       ['021fd159b55773fba8157e2090fe0fe2', '1',
        'a99f44bbff39e352191a870e17f04537',
        '012059d397c0b7e5a30a5bb89c0b075e', 'A'],
       ...,
       ['fdeb2950c4d5209d449ebd2d6afac11e', '4',
        '4f4e47023263931e1445dc97f7dae941',
        '3cd0b15957ceb80f5125bef8bd1bbea7', 'A'],
       ['fdeb2950c4d5209d449ebd2d6afac11e', '4',
        '021dabc5d7a1404ec8ad34fe8ca4b5e3',
        '3cd0b15957ceb80f5125bef8bd1bbea7', 'A'],
       ['fdeb2950c4d5209d449ebd2d6afac11e', '4',
        'f79a2b5e6190ac3c534645e806f1b611',
        '3cd0b15957ceb80f5125bef8bd1bbea7', 'A']], dtype='<U32')

第二列的数据类型仍然是str。是因为这个特殊的numpy数组有dtype限制吗?如何将第二列更改为int?谢谢。

代码语言:javascript
复制
np.array(nd2values,dtype=[str,int,str,str,str])

给出

代码语言:javascript
复制
TypeError: data type not understood
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-12 02:23:03

赋值是将整数转换为数组的类型。为了能够在数组中保存所有类型的对象,请将dtype设置为object。

代码语言:javascript
复制
nd2values = nd2values.astype(object)

然后

代码语言:javascript
复制
nd2values[:,[1]]=nd2values[:,[1]].astype(int)
票数 0
EN

Stack Overflow用户

发布于 2018-07-13 04:55:40

一种结构化数组替代方案:

从问题中复制粘贴给我一个具有U32 dtype的(6,5)数组:

代码语言:javascript
复制
In [96]: arr.shape
Out[96]: (6, 5)

定义复合数据类型:

代码语言:javascript
复制
In [99]: dt = np.dtype([('f0','U32'),('f1',int),('f2','U32'),('f3','U32'),('f4','U1')])

结构化数组的输入应该是元组列表:

代码语言:javascript
复制
In [100]: arrS = np.array([tuple(x) for x in arr], dt)
In [101]: arrS
Out[101]: 
array([('021fd159b55773fba8157e2090fe0fe2', 1, '881f83d2dee3f18c7d1751659406144e', '012059d397c0b7e5a30a5bb89c0b075e', 'A'),
       ('021fd159b55773fba8157e2090fe0fe2', 1, 'cec898a1d355dbfbad8c760615fde1af', '012059d397c0b7e5a30a5bb89c0b075e', 'A'),
       ('021fd159b55773fba8157e2090fe0fe2', 1, 'a99f44bbff39e352191a870e17f04537', '012059d397c0b7e5a30a5bb89c0b075e', 'A'),
       ('fdeb2950c4d5209d449ebd2d6afac11e', 4, '4f4e47023263931e1445dc97f7dae941', '3cd0b15957ceb80f5125bef8bd1bbea7', 'A'),
       ('fdeb2950c4d5209d449ebd2d6afac11e', 4, '021dabc5d7a1404ec8ad34fe8ca4b5e3', '3cd0b15957ceb80f5125bef8bd1bbea7', 'A'),
       ('fdeb2950c4d5209d449ebd2d6afac11e', 4, 'f79a2b5e6190ac3c534645e806f1b611', '3cd0b15957ceb80f5125bef8bd1bbea7', 'A')],
      dtype=[('f0', '<U32'), ('f1', '<i8'), ('f2', '<U32'), ('f3', '<U32'), ('f4', '<U1')])

其中一个字段可以按名称访问:

代码语言:javascript
复制
In [102]: arrS['f1']
Out[102]: array([1, 1, 1, 4, 4, 4])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51291797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档