如何在numpy.array中删除列

106 投票
8 回答
288541 浏览
提问于 2025-04-15 15:29

我想在一个numpy.array中删除选定的列。我的做法是这样的:

n [397]: a = array([[ NaN,   2.,   3., NaN],
   .....:        [  1.,   2.,   3., 9]])

In [398]: print a
[[ NaN   2.   3.  NaN]
 [  1.   2.   3.   9.]]

In [399]: z = any(isnan(a), axis=0)

In [400]: print z
[ True False False  True]

In [401]: delete(a, z, axis = 1)
Out[401]:
 array([[  3.,  NaN],
       [  3.,   9.]])

在这个例子中,我的目标是删除所有包含NaN(也就是缺失值)的列。我希望最后的命令能得到:

array([[2., 3.],
       [2., 3.]])

我该怎么做呢?

8 个回答

16

另一种方法是使用“掩码数组”:

import numpy as np
a = np.array([[ np.nan,   2.,   3., np.nan], [  1.,   2.,   3., 9]])
print(a)
# [[ NaN   2.   3.  NaN]
#  [  1.   2.   3.   9.]]

np.ma.masked_invalid 方法会返回一个掩码数组,其中的 nans(不是数字)和 infs(无穷大)会被隐藏起来:

print(np.ma.masked_invalid(a))
[[-- 2.0 3.0 --]
 [1.0 2.0 3.0 9.0]]

np.ma.compress_cols 方法会返回一个二维数组,任何包含掩码值的列都会被去掉:

a=np.ma.compress_cols(np.ma.masked_invalid(a))
print(a)
# [[ 2.  3.]
#  [ 2.  3.]]

可以查看 如何操作掩码数组

33

这是来自 numpy文档 的一个例子:

>>> a = numpy.array([[ 0,  1,  2,  3],
               [ 4,  5,  6,  7],
               [ 8,  9, 10, 11],
               [12, 13, 14, 15]])

>>> numpy.delete(a, numpy.s_[1:3], axis=0)                       # remove rows 1 and 2

array([[ 0,  1,  2,  3],
       [12, 13, 14, 15]])

>>> numpy.delete(a, numpy.s_[1:3], axis=1)                       # remove columns 1 and 2

array([[ 0,  3],
       [ 4,  7],
       [ 8, 11],
       [12, 15]])
173

根据它的名字,我觉得标准的方式应该是 delete

import numpy as np

A = np.delete(A, 1, 0)  # delete second row of A
B = np.delete(B, 2, 0)  # delete third row of B
C = np.delete(C, 1, 1)  # delete second column of C

根据 numpy的文档页面numpy.delete 的参数如下:

numpy.delete(arr, obj, axis=None)

  • arr 是你要处理的输入数组,
  • obj 是指你想删除的子数组(比如某一列或某一行的编号,或者数组的一部分),
  • axis 是指你要进行删除操作的方向,可以是按列删除(axis = 1)或者按行删除(axis = 0)。

撰写回答