【发布时间】:2016-04-25 10:02:13
【问题描述】:
我使用了一个外部库函数,它返回一个 numpy 结构化数组。
cities_array
>>> array([ (1, [-122.46818353792992, 48.74387985436505], u'05280', u'Bellingham', u'53', u'Washington', u'5305280', u'city', u'N', -99, 52179),
(2, [-109.67985528815007, 48.54381826401885], u'35050', u'Havre', u'30', u'Montana', u'3035050', u'city', u'N', 2494, 10201),
(3, [-122.63068540357023, 48.49221584868184], u'01990', u'Anacortes', u'53', u'Washington', u'5301990', u'city', u'N', -99, 11451),
...,
(3147, [-156.45657614262274, 20.870633142444376], u'22700', u'Kahului', u'15', u'Hawaii', u'1522700', u'census designated place', u'N', 7, 16889),
(3148, [-156.45038252004554, 20.76059218396], u'36500', u'Kihei', u'15', u'Hawaii', u'1536500', u'census designated place', u'N', -99, 11107),
(3149, [-155.08472452266503, 19.693112205773275], u'14650', u'Hilo', u'15', u'Hawaii', u'1514650', u'census designated place', u'N', 38, 37808)],
dtype=[('ID', '<i4'), ('Shape', '<f8', (2,)), ('CITY_FIPS', '<U5'), ('CITY_NAME', '<U40'), ('STATE_FIPS', '<U2'), ('STATE_NAME', '<U25'), ('STATE_CITY', '<U7'), ('TYPE', '<U25'), ('CAPITAL', '<U1'), ('ELEVATION', '<i4'), ('POP1990', '<i4')])
cities_array 的类型为 <type 'numpy.ndarray'>。
我可以访问数组的各个列:
cities_array[['ID','CITY_NAME']]
>>> array([(1, u'Bellingham'), (2, u'Havre'), (3, u'Anacortes'), ...,
(3147, u'Kahului'), (3148, u'Kihei'), (3149, u'Hilo')],
dtype=[('ID', '<i4'), ('CITY_NAME', '<U40')])
现在我想删除第一列ID。 help 和 SO questions 说它应该是 numpy.delete。
运行时:numpy.delete(cities_array,cities_array['ID'],1) 我收到错误消息:
...in delete
N = arr.shape[axis]
IndexError: tuple index out of range
我做错了什么?我应该对 city_array 进行后处理以便能够使用该数组吗?
我使用的是 Python 2.7.10 和 numpy 1.11.0
【问题讨论】:
-
如答案所示,您可以查看数据类型名称的子集。这不是真正的删除。还有一个可能实现删除副本的 recfuncs 库。
-
numpy.lib.recfunctions.drop_fields
-
@hpaulj,感谢您的评论,很高兴知道有一个外部库。但是这样一个基本的操作失败了不是很奇怪吗?只是一个简单的数组
x = numpy.zeros(3, dtype={'names':['col1', 'col2'], 'formats':['i4','f4']})无法删除带有numpy.delete(x,0,1)的列。这个问题的溃败原因是什么,有什么想法吗?
标签: python arrays python-2.7 numpy