为什么 numpy 数组列数据类型没有更新?
Why is it that the numpy array column data type does not get updated?
nd2values[:,[1]]=nd2values[:,[1]].astype(int)
nd2values
产出
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
?谢谢。
np.array(nd2values,dtype=[str,int,str,str,str])
给予
TypeError: data type not understood
作业正在将您的整数转换为数组类型。为了能够在数组中保存所有类型的对象,请将 dtype 设置为对象。
nd2values = nd2values.astype(object)
然后
nd2values[:,[1]]=nd2values[:,[1]].astype(int)
结构化数组替代方案:
问题中的复制粘贴给出了一个 U32
dtype:
的 (6,5) 数组
In [96]: arr.shape
Out[96]: (6, 5)
定义复合数据类型:
In [99]: dt = np.dtype([('f0','U32'),('f1',int),('f2','U32'),('f3','U32'),('f4','U1')])
结构化数组的输入应该是元组列表:
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')])
可以通过名称访问一个字段:
In [102]: arrS['f1']
Out[102]: array([1, 1, 1, 4, 4, 4])
nd2values[:,[1]]=nd2values[:,[1]].astype(int)
nd2values
产出
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
?谢谢。
np.array(nd2values,dtype=[str,int,str,str,str])
给予
TypeError: data type not understood
作业正在将您的整数转换为数组类型。为了能够在数组中保存所有类型的对象,请将 dtype 设置为对象。
nd2values = nd2values.astype(object)
然后
nd2values[:,[1]]=nd2values[:,[1]].astype(int)
结构化数组替代方案:
问题中的复制粘贴给出了一个 U32
dtype:
In [96]: arr.shape
Out[96]: (6, 5)
定义复合数据类型:
In [99]: dt = np.dtype([('f0','U32'),('f1',int),('f2','U32'),('f3','U32'),('f4','U1')])
结构化数组的输入应该是元组列表:
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')])
可以通过名称访问一个字段:
In [102]: arrS['f1']
Out[102]: array([1, 1, 1, 4, 4, 4])