我需要返回其中有空格的第三列的非合理(nan或超出范围)值的数量。我必须在一个真正的问题中处理一个csv文件,但我现在只是创建了一个ndarray。如何使用numpy返回数组中某些值的数量
data = np.array([[ 1, 2000, 143, 4546], [ 2, 1999, 246, 0], [ 3, 2008, 190, ], [ 4, 2000, 100, 0]])
我什至不能想到应该从哪里开始。
如果有人可以帮忙,这将是非常棒的。
我需要返回其中有空格的第三列的非合理(nan或超出范围)值的数量。我必须在一个真正的问题中处理一个csv文件,但我现在只是创建了一个ndarray。如何使用numpy返回数组中某些值的数量
data = np.array([[ 1, 2000, 143, 4546], [ 2, 1999, 246, 0], [ 3, 2008, 190, ], [ 4, 2000, 100, 0]])
我什至不能想到应该从哪里开始。
如果有人可以帮忙,这将是非常棒的。
首先,你需要能够访问只是你有兴趣在列与切片做:
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]))
这是无聊的,不过,因为第三栏不具有任何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
与否。当作为数字处理时,其被转换为1
和 np.count_nonzero NaN`值。
np.count_nonzero(data[:,2])
直接计数非零数。如果我们从总元素中减去非零元素的数量,我们将得到0
s的数量。
嘿非常感谢你。我在我的真实csv数据上试过这段代码。我在其中有0个的几列进行测试。但我得到的数字比实际计数还多。 所以如果在一列中有54个0,那么我得到55个不知何故。 –
尝试自行运行这三部分,看看哪一个给出了错误的编号。所以'slice.size',然后'np.count_nonzero(slice)'然后'np。count_nonzero(np.isnan(切片))'。 – RagingRoosevelt
你能更具体地了解你需要什么吗?你想从中得到什么输出? – Psidom
这就是我想要了解的..这就是问题的措辞。所以我想我只需要返回csv文件中有多少个单元格是空的,nan或者0。 –
应该是'data = np.array([[1,2,193,4546],[2,1999,246 ,0],[3,2008,190,np.NAN],[4,2000,100,0]])' – RagingRoosevelt