如何在numpy.array中删除列
我想在一个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
)。