Open In App

Counting the number of non-NaN elements in a NumPy Array

Last Updated : 03 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

In this article, we are going to see how to count the number of non-NaN elements in a NumPy array in Python.

NAN: It is used when you don’t care what the value is at that position. Maybe sometimes is used in place of missing data, or corrupted data. 

Method 1: Using Condition

In this example, we will use one-dimensional arrays. In the below-given code, we loop over every entry of the given NumPy array and check if the value is a NaN or not.

Python3




import numpy as np
 
ex1 = np.array([1, 4, -9, np.nan])
ex2 = np.array([1, 45, -2, np.nan, 3,
                -np.nan, 3, np.nan])
 
 
def approach_1(data):
    # here the input data, is a numpy ndarray
     
    # initialize the number of non-NaN elements
    # in data
    count = 0      
     
    # loop over each entry of the data
    for entry in data:         
       
          # check whether the entry is a non-NaN value
        # or not
        if not np.isnan(entry):    
           
              # if not NaN, increment "count" by 1
            count += 1             
    return count
 
print(approach_1(ex1))
print(approach_1(ex2))


Output:

3
5

Method 2: Using isnan()

Using the functionality of NumPy arrays, that we can perform an operation on the whole array at once, instead of a single element.

Used function:

  • np.isnan(data): Returns a boolean array after performing np.isnan() operation on one of the entries of the array, data
  • np.sum(): Since we are inputting a boolean array to the sum function, it returns the number of True values (1s) in the bool array.

Python3




import numpy as np
 
ex3 = np.array([[3, 4, -390, np.nan],
                [np.nan, np.nan, np.nan, -90]])
 
def approach_2(data):
    return np.sum(~np.isnan(data))
 
print(approach_2(ex3))


Output:

4

Method 3:  Using np.count_nonzero() function

numpy.count_nonzero() function counts the number of non-zero values in the array arr.

Syntax : numpy.count_nonzero(arr, axis=None)

Parameters :
arr : [array_like] The array for which to count non-zeros.
axis : [int or tuple, optional] Axis or tuple of axes along which to count non-zeros. Default is None, meaning that non-zeros will be counted along a flattened version of arr.

Return : [int or array of int] Number of non-zero values in the array along a given axis. Otherwise, the total number of non-zero values in the array is returned.

Python3




import numpy as np
 
ex4 = np.array([[0.35834379, 0.67202438, np.nan, np.nan,
                 np.nan, 0.47870971],
                [np.nan, np.nan, np.nan, 0.08113384,
                 0.70511741, 0.15260996],
                [0.09028477, np.nan, 0.16639899,
                    0.47740582, 0.72591160.94797347],
                [0.80305651,     np.nan, 0.67949724,
                    0.84112054, 0.15951702, 0.07510587],
                [0.28643337, 0.00804256, 0.36775056,
                 0.19360266, 0.07288145, 0.37076932]])
 
def approach_3(data):
    return data.size - np.count_nonzero(np.isnan(data))
 
print(approach_3(ex4))


Output:

22


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads