我的数组看起来如下(9列)
[('2012-07', 'abc', 'EXECUTIVE', '149', '16 TO 18', 150., 1995,'apt', 1000000)
('2012-10', 'abc', 'EXECUTIVE', '194', '22 TO 24', 163., 1987, 'ma', 1010000)
('2014-12', 'abc', 'EXECUTIVE', '190', '19 TO 21', 150., 1987, 'ma', 1000000)]
print(a.shape)
output >> (3,)
print(len(a))
output >> 3我想删除最后的第二栏,所以它将如下所示
[('2012-07', 'abc', 'EXECUTIVE', '149', '16 TO 18', 150., 1995, 1000000)
('2012-10', 'abc', 'EXECUTIVE', '194', '22 TO 24', 163., 1987, 1010000)
('2014-12', 'abc', 'EXECUTIVE', '190', '19 TO 21', 150., 1987, 1000000)] 我尝试了np.delete函数:
b = np.delete(a,7,axis=1)
Error >> AxisError: axis 1 is out of bounds for array of dimension 1我的数组有9列的多行,只想删除一列。
任何帮助都将不胜感激。谢谢!
发布于 2020-06-17 07:25:58
首先要注意的是,您有一个结构化的 Numpy数组。
它必须用dtype参数创建,否则所有字段类型都是U。(一定大小的Unicode字符串)。我创建了这样一个数组,运行如下:
a = np.array([
('2012-07', 'abc', 'EXECUTIVE', '149', '16 TO 18', 150., 1995, 'apt', 1000000),
('2012-10', 'abc', 'EXECUTIVE', '194', '22 TO 24', 163., 1987, 'ma', 1010000),
('2014-12', 'abc', 'EXECUTIVE', '190', '19 TO 21', 150., 1987, 'ma', 1000000)],
dtype='U7, U3, U10, i4, U10, f4, i4, U4, i4')请注意,即使您没有传递字段名(只有上面这样的类型),Numpy仍然会指定默认的字段名称,如f0、f1等等。
要打印字段名,可以运行例如a.dtype.names。在上述情况下,我得到:
('f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8')因此,您的任务可能是删除f7字段(在您的环境中签入)。也许您有一些由代码明确指定的字段名,所以使用最后一个名称代替。
若要获得删除此列的Numpy数组的副本,可以运行:
import numpy.lib.recfunctions as rcf
b = rcf.drop_fields(a, 'f7')或者把它保存在一个你愿意的地方。
Yang --关于 Jason提出的解决方案的一点看法
如果您运行b.shape,您将得到(3, 9),而您的示例包含(3,),而我创建的数组正是这个形状。
因此,您的数组一定是以其他方式创建的,而不是在他的解决方案中。
发布于 2020-06-17 06:46:39
a.shape:(3,),它意味着在轴0上只有3个元素,没有轴1。应该检查如何将矩阵数据分配给。
import numpy as np
a = [('2012-07', 'abc', 'EXECUTIVE', '149', '16 TO 18', 150., 1995, 'apt', 1000000),
('2012-10', 'abc', 'EXECUTIVE', '194', '22 TO 24', 163., 1987, 'ma', 1010000),
('2014-12', 'abc', 'EXECUTIVE', '190', '19 TO 21', 150., 1987, 'ma', 1000000)]
b = np.array(a)
c = np.delete(b,7,axis=1)发布于 2020-06-17 07:08:55
虽然other answer对常规数组是正确的,但它没有回答OP中的问题,即结构化数组的问题。在这种情况下,您可以创建一个只包含所需列的新数组,即不是删除不需要的列,而是选择想要的列。
删除第七列的示例:
b = a[list(a.dtype.names[:7] + arr.dtype.names[8:])]您还可以使用助手函数drop_fields。
from numpy.lib import recfunctions as rfn
b = rfn.drop_fields(a, a.dtype.names[7])https://stackoverflow.com/questions/62422867
复制相似问题