我需要返回第3列的非合理(纳米或超出范围)值的数量,其中0为空白。我必须在一个真正的问题中处理一个csv文件,但我刚刚创建了一个ndarray。
data = np.array([[ 1, 2000, 143, 4546], [ 2, 1999, 246, 0], [ 3, 2008, 190, ], [ 4, 2000, 100, 0]])
我甚至无法思考应该从哪里开始。
如果有人可以提供帮助,那将会非常棒。
答案 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列中没有任何0
或NaN
。让我们试试最后一栏:
>>> slice = data[:,3]
>>> slice.size - np.count_nonzero(slice) + np.count_nonzero(np.isnan(slice))
3
编辑我应该解释一下为什么会有效:
np.isnan(data[:,2])
根据True
是否False
给出一个NaN
和True
数组。 1
被视为数字时,会转换为False is converted to
和so the
0 call counts the number of
np.count_nonzero which represent the
1 np.count_nonzero(data[:,2])
NaN`值。
0
直接计算非零数。如果我们从元素总数中减去非零元素的数量,我们将获得{{1}} s的数量。