如何使用numpy返回数组中某些值的数量

时间:2017-09-20 14:35:12

标签: python arrays numpy count

我需要返回第3列的非合理(纳米或超出范围)值的数量,其中0为空白。我必须在一个真正的问题中处理一个csv文件,但我刚刚创建了一个ndarray。

data = np.array([[   1, 2000,  143, 4546], [   2, 1999,  246,    0], [   3, 2008,  190,    ], [   4, 2000,  100,    0]])

我甚至无法思考应该从哪里开始。

如果有人可以提供帮助,那将会非常棒。

1 个答案:

答案 0 :(得分:1)

首先,您需要能够只访问您感兴趣的列。使用切片执行此操作:

data[:,2] # grab all rows, and just the column with index 2

现在您要计算NaN的出现次数:

np.count_nonzero(np.isnan(data[:,2]))

我们想要计算零元素的数量:

data[:,2].size - np.count_nonzero(data[:,2])

如果我们将它们加在一起:

data[:,2].size - np.count_nonzero(data[:,2]) + np.count_nonzero(np.isnan(data[:,2]))

这很无聊,因为第3列中没有任何0NaN。让我们试试最后一栏:

>>> slice = data[:,3]
>>> slice.size - np.count_nonzero(slice) + np.count_nonzero(np.isnan(slice))
3

编辑我应该解释一下为什么会有效:

np.isnan(data[:,2])根据True是否False给出一个NaNTrue数组。 1被视为数字时,会转换为False is converted toso the 0 call counts the number of np.count_nonzero which represent the 1 np.count_nonzero(data[:,2]) NaN`值。

0直接计算非零数。如果我们从元素总数中减去非零元素的数量,我们将获得{{1}} s的数量。