2017-09-20 60 views
0

我需要返回其中有空格的第三列的非合理(nan或超出范围)值的数量。我必须在一个真正的问题中处理一个csv文件,但我现在只是创建了一个ndarray。如何使用numpy返回数组中某些值的数量

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

我什至不能想到应该从哪里开始。

如果有人可以帮忙,这将是非常棒的。

+1

你能更具体地了解你需要什么吗?你想从中得到什么输出? – Psidom

+0

这就是我想要了解的..这就是问题的措辞。所以我想我只需要返回csv文件中有多少个单元格是空的,nan或者0。 –

+0

应该是'data = np.array([[1,2,193,4546],[2,1999,246 ,0],[3,2008,190,np.NAN],[4,2000,100,0]])' – RagingRoosevelt

回答

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])) 

这是无聊的,不过,因为第三栏不具有任何0或它NaN。让我们尝试用最后一列:

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

编辑我应该解释为什么这个工程:

np.isnan(data[:,2])给出了一种基于的TrueFalse一个数组,如果它是一个NaN与否。当作为数字处理时,其被转换为1和 np.count_nonzero NaN`值。

np.count_nonzero(data[:,2])直接计数非零数。如果我们从总元素中减去非零元素的数量,我们将得到0 s的数量。

+0

嘿非常感谢你。我在我的真实csv数据上试过这段代码。我在其中有0个的几列进行测试。但我得到的数字比实际计数还多。 所以如果在一列中有54个0,那么我得到55个不知何故。 –

+0

尝试自行运行这三部分,看看哪一个给出了错误的编号。所以'slice.size',然后'np.count_nonzero(slice)'然后'np。count_nonzero(np.isnan(切片))'。 – RagingRoosevelt

相关问题