Как найти nan в numpy

numpy.isnan(x, /, out=None, *, where=True, casting=’same_kind’, order=’K’, dtype=None, subok=True[, signature, extobj]) = <ufunc ‘isnan’>#

Test element-wise for NaN and return result as a boolean array.

Parameters:
xarray_like

Input array.

outndarray, None, or tuple of ndarray and None, optional

A location into which the result is stored. If provided, it must have
a shape that the inputs broadcast to. If not provided or None,
a freshly-allocated array is returned. A tuple (possible only as a
keyword argument) must have length equal to the number of outputs.

wherearray_like, optional

This condition is broadcast over the input. At locations where the
condition is True, the out array will be set to the ufunc result.
Elsewhere, the out array will retain its original value.
Note that if an uninitialized out array is created via the default
out=None, locations within it where the condition is False will
remain uninitialized.

**kwargs

For other keyword-only arguments, see the
ufunc docs.

Returns:
yndarray or bool

True where x is NaN, false otherwise.
This is a scalar if x is a scalar.

Notes

NumPy uses the IEEE Standard for Binary Floating-Point for Arithmetic
(IEEE 754). This means that Not a Number is not equivalent to infinity.

Examples

>>> np.isnan(np.nan)
True
>>> np.isnan(np.inf)
False
>>> np.isnan([np.log(-1.),1.,np.log(0)])
array([ True, False, False])

In this article, We will learn how to check if a NumPy Array contains any NaN value in Python.

Table of Contents

  • What is a NaN value?
  • Check if a NumPy Array contains any NaN value using isnan() method
  • Check if a NumPy array contains any NaN value using isna() method
  • Check if a NumPy array has any NaN value using math module
  • Check if a NumPy array has any NaN value using equality

What is a NaN value?

The NaN stands for Not a Number, which is a numeric data type that can be interpreted as a value that is undefined or unrepresentable.
Usually NaN values are used to represent the missing data in a dataframe or a NumPy Array.

Given a NumPy array, we need to check if the NumPy Array contains any NaN value or not.

Advertisements

Example:             

	Given array = [1, 2, 3, 4, NaN, 5, 6]

	The Array has NaN value at 5th position.

There are multiple ways to check if a NumPy Array contains any NaN value. Let’s discuss all the methods one by one with a proper approach and a working code example.

Check if a NumPy Array contains any NaN value using isnan() method

Numpy module in python, provides a function numpy.isnan(), to check if an element is NaN or not. The isnan() method will take a array as an input and returns a boolean array of same size. The values in boolean array represent that if the element at that corresponding position in original array is a NaN or not. The value in boolean array is True where element is NaN, false otherwise.

Frequently Asked:

  • Remove First element from a NumPy Array in Python
  • Add a value to each element of an array in Python
  • Insert an element at the beginning of NumPy Array
  • numpy.linspace() | Create same sized samples over an interval in Python

Syntax of isnan()

numpy.isnan(arr)

Parameters:

arr          = The input array to be passed to the function.

Return:

Returns a boolean array, True where element is NaN, false otherwise.    

As this method returns a boolean array, we need to check if the array contain atleast one true value i.e, NaN value. The any() method can be used to find if there is at least one true value. The any() method returns True if any item in an array is true, otherwise it returns False.

Syntax of any()

any(arr)

Parameters:

arr = The input array to be passed to the function.

Return:

Returns a boolean value, True if any item in an array are true, otherwise it returns False.

Approach

  • Import numpy library and create a numpy array
  • Now pass the array to the isnan() method. It will return a boolean array. Where True value denotes the NaN values in original array.
  • Pass the boolean array to the any() method, and it will returns a boolean value
  • If the value is true print “Array has NaN values” else print “Array has no NaN values.”

Source code

import numpy as np

# Creating a NumPy array
arr = np.array([1, 2, 3, 4, np.NaN, 5, 6])


# Check if the NumPy array contains any NaN value
if(np.isnan(arr).any()):
    print("The Array contain NaN values")
else:
    print("The Array does not contain NaN values")

OUTPUT:

The Array contain NaN values

Check if a NumPy array contains any NaN value using isna() method

Pandas module in python, provides a function Pandas.isna(), to check if a element is NaN or not. The isna() method will take an array as an input and returns a boolean array. The values in boolean array represent that if the element at that corresponding position in original array is a NaN or not. The value in boolean array is True where element is NaN and false otherwise.

Syntax of isna()

pandas.isna(arr)

Parameters:

arr = The input array to be passed to the function.

Return:

Returns a boolean array. It will contain True where element is NaN in original array, false otherwise.    

As the method returns a boolean array, we need to check if the array contain at least one true value i.e, NaN value. The any() method can be used to find if there is at least one true value. The any(arr) accepts a numpy array as argument and method returns True if any item in an array is True, otherwise it returns False.

Approach

  • Import numpy library and create a numpy array
  • Now pass the array to the isna() method. It will return a boolean array. Where True value denotes the NaN values in original array.
  • Pass the boolean array to the any method, the any() will returns a boolean value
  • If the value is true print “Array has NaN values” else print “Array has no NaN values.”

Source code

import pandas as pd
import numpy as np

# Creating a NumPy array
arr = np.array([1, 2, 3, 4, np.NaN, 5, 6])

# Check if the NumPy array contains any NaN value
if(pd.isna(arr).any()):
    print("The Array contain NaN values")
else:
    print("The Array does not contain NaN values")

OUTPUT:

The Array contain NaN values

Check if a NumPy array has any NaN value using isnan() method of math module

Math module in python, provides a function math.isnan() to check if a element is NaN or not. The isnan() method will take a value as an input and returns a boolean value, The returned boolean value True if the element is NaN, false otherwise..

Now to check if there is any NaN in a NumPy Array, using a for loop, we will iterate over the array and apply isnan() method too each element in the array, if any element is NaN then break the loop and print the array has NaN values.

Approach

  • Import numpy library and create a numpy array
  • Initialise a boolean flag contain = False.
  • Iterate over the array using a loop and apply isnan() on each element. The isnan() will return a boolean value
  • If the returned value is true, set the boolean flag to True and print “Array has NaN values” and break the loop.
  • Outside the loop, check the contain flag, if it is False print “Array has no NaN values”

Source code

import numpy as np
import math

# Create a NumPy array
arr = np.array([1, 2, 3, 4, np.NaN, 5, 6])

# Check if the NumPy array contains any NaN value
contain=False
for i in arr:
    if(math.isnan(i)):
        contain = True
        break

if(contain):
    print("The Array contain NaN values")
else:
    print("The Array does not contain NaN values")

    

OUTPUT:

The Array contain NaN values

Check the equality of the value with itself to check if a NumPy array contains any NaN value.

When a value is checked for equality with itself, it will return True, but in the case of the NaN value, even when it are compared with itself, it will return False.

Now to check if there is a NaN in array, using a for loop we will iterate over the array and compare each element with itself using a equality operator. If any value is not equal with itself then it is a NaN value and print array has NaN values.

Approach

  • Import numpy library and create a numpy array
  • Initialize a boolean flag contain = False.
  • Iterate over the array using a loop and check for equality with itself
  • If the values are Not equal, set the boolean flag to True and print “Array has NaN values” and break the loop.
  • Outside the check the contain flag, if it is False print “Array has no NaN values”.

Source code

#importing the numpy library
import numpy as np

# creating  numpy array
arr = np.array([1, 2, 3, 4, np.NaN, 5, 6])


# Checking if the NumPy array contains any NaN value
contain= False
for i in arr:
    if ( i!=i ):
        contain = True
        break

if(contain):
    print("The Array contain NaN values")
else:
    print("The Array does not contain NaN values")


OUTPUT:

The Array contain NaN values

Summary

Great! you made it, We have discussed all possible methods to check if a NumPy array contains any NaN value or not. Happy learning.

Adding to @nico-schlömer and @mseifert ‘s answers, I computed the performance of a numba-test has_nan with early stops, compared to some of the functions that will parse the full array.

On my machine, for an array without nans, the break-even happens for ~10^4 elements.

has_nan_vs_full_parse_methods


import perfplot
import numpy as np
import numba
import math

def min(a):
    return np.isnan(np.min(a))

def dot(a):
    return np.isnan(np.dot(a, a))

def einsum(a):
    return np.isnan(np.einsum("i->", a))

@numba.njit
def has_nan(a):
    for i in range(a.size - 1):
        if math.isnan(a[i]):
            return True
    return False


def array_with_missing_values(n, p):
    """ Return array of size n,  p : nans ( % of array length )
    Ex : n=1e6, p=1 : 1e4 nan assigned at random positions """
    a = np.random.rand(n)
    p = np.random.randint(0, len(a), int(p*len(a)/100))
    a[p] = np.nan
    return a


#%%
perfplot.show(
    setup=lambda n: array_with_missing_values(n, 0),
    kernels=[min, dot, has_nan],
    n_range=[2 ** k for k in range(20)],
    logx=True,
    logy=True,
    xlabel="len(a)",
)

What happens if the array has nans ? I investigated the impact of the nan-coverage of the array.

For arrays of length 1,000,000, has_nan becomes a better option is there are ~10^-3 % nans (so ~10 nans) in the array.

impact of nan-coverage of array


#%%
N = 1000000  # 100000
perfplot.show(
    setup=lambda p: array_with_missing_values(N, p),
    kernels=[min, dot, has_nan],
    n_range=np.array([2 ** k for k in range(20)]) / 2**20 * 0.01, 
    logy=True,
    xlabel=f"% of nan in array (N = {N})",
)

If in your application most arrays have nan and you’re looking for ones without, then has_nan is the best approach.
Else; dot seems to be the best option.

Автор оригинала: Pankaj Kumar.

Нан короткая для Не число Отказ Он используется для представления записей, которые не определены. Он также используется для представления отсутствующих значений в наборе данных.

Концепция Нэна существовала даже до того, как был создан Python. Стандарт IEEE для арифметики с плавучей точкой (IEEE 754) ввел НАН в 1985 году.

NAN – это специальное значение с плавающей точкой, которое не может быть преобразовано в любой другой тип, чем поплавок.

В этом уроке мы рассмотрим, как NAN работает в Pands и Numpy.

Нан в Numpy

Давайте посмотрим, как работает NAN под Numpy. Для наблюдения за свойствами NAN давайте создадим NAN-массив с значениями NAN.

import numpy as np
arr = np.array([1, np.nan, 3, 4, 5, 6, np.nan]) 
pritn(arr) 

Выход:

[ 1. nan  3.  4.  5.  6. nan]

1. Математические операции на NaMy Array с NAN

Давайте попробуем вызвать некоторые основные функции на Numpy Array.

Выход:

Давайте попробуйте найти максимум от массива:

Выход:

К счастью, Numpy предлагает методы, которые игнорируют значения NAN при выполнении математических операций.

2. Как игнорировать значения NAN при выполнении математических операций на Numpy Array

Numpy предлагает вам методы, такие как NP.NANSUM () и NP.NANMAX (), чтобы рассчитать сумму и MAX после игнорирования значений NAN в массиве.

Выход:

Если у вас есть автозаполнение в своей IDE, вы увидите следующий список опций во время работы с NP.NAN:

NP NAN

3. Проверка значений NAN

Чтобы проверить значения NAN в NAMPY MARY, вы можете использовать метод NP.ISNAN ().

Это выводит логическую маску размера, которая из исходного массива.

Выход:

[False  True False False False False  True]

Выходной массив имеет True для индексов, которые являются Nans в исходном массиве и ложь для остальных.

4. Приравнять два нанда

Две назы, равные друг другу?

Это может быть запутанным вопросом. Давайте попробуем ответить на него, запустив код Python.

Эти два утверждения инициализируют две переменные, A и B с NAN. Попробуем приравнивать два.

Выход:

В Python у нас также есть это оператор. Давайте попробуем использовать это, чтобы сравнить две переменные.

Выход:

Причина этого является то, что сравнивает значения как операндов, так и проверки на равенство стоимости. это оператор С другой стороны, проверяет ли оба операнды к одному и тому же объекту или нет.

На самом деле, вы можете распечатать идентификаторы как A и B и увидеть, что они относятся к одному и тому же объекту.

Выход:

Выход:

Нан в Pandas DataFrame

Pandas DataFrames – это обычный способ импорта данных в Python. Давайте посмотрим, как мы можем иметь дело с NAN ценностями в PandaS DataFrame.

Давайте начнем с создания DataFrame.

 s = pd.DataFrame([(0.0, np.nan, -2.0, 2.0),
...                    (np.nan, 2.0, np.nan, 1),
...                    (2.0, 5.0, np.nan, 9.0),
...                    (np.nan, 4.0, -3.0, 16.0)],
...                   columns=list('abcd'))
s

Выход:

Dataframe.

1. Проверка на NAN ценности

Вы можете проверить значения NAN, используя Isnull () Метод Отказ Выходной вывод будет логической маской с размерами, что из исходного DataFrame.

Выход:

Нулевой

2. Замена значения NAN

Существует несколько способов заменить значения NAN в DataFrame PandaS. Наиболее распространенный способ сделать это является использованием .fillna () метод.

Этот метод требует, чтобы вы укажете значение, чтобы заменить назы.

Выход:

Fillna0.

В качестве альтернативы вы также можете упомянуть значения значений столбца. Это означает, что все Nans под один столбец будут заменены с тем же значением.

values = {'a': 0, 'b': 1, 'c': 2, 'd': 3}
s.fillna(value=values)

Выход:

Колонна Филна

Вы также можете использовать интерполяцию для заполнения пропущенных значений в кадре данных. Интерполяция – это слегка продвинутый метод по сравнению с .Fillna ().

Интерполяция – это техника, с которой вы можете оценить неизвестные точки данных между двумя известными точками данных.

3. Строки падения, содержащие значения NAN

Чтобы бросить ряды или столбцы назами, вы можете использовать .DROPNA () метод.

Чтобы бросить строки с помощью Nans:

Чтобы опустить колонны с помощью Nans:

df.dropna(axis='columns')

Заключение

Этот учебник был о назах в Python. Мы высоко сосредоточены на том, чтобы иметь дело с называющимисями в Nanpy и Pandas. Надеюсь, вы веселились с нами.

Время чтения 3 мин.

np.nan — это константа, представляющая отсутствующее или неопределенное числовое значение в массиве NumPy. Означает «не число» и имеет тип float. np.nan эквивалентен NaN.

Содержание

  1. Синтаксис и примеры
  2. Пример 1: Основное использование np.nan
  3. Пример 2: значение nan в консоли
  4. Пример 3: Сравнение значений np.nan в Python
  5. Что такое функция np.isnan() в Python?
  6. Часто задаваемые вопросы
  7. Чем np.nan отличается от None?
  8. Как проверить значения np.nan в массиве NumPy?
  9. Как заменить значения np.nan в массиве NumPy?
  10. Как np.nan можно обрабатывать в вычислениях?

Синтаксис и примеры

Пример 1: Основное использование np.nan

import numpy as np

myarr = np.array([1, 0, np.nan, 3])

print(myarr)

Выход:

Важная вещь, которую я хотел бы, чтобы вы вынесли из этого, заключается в том, что все наши целые числа были преобразованы в числа с плавающей запятой, и это потому, что NumPy определил тип данных NaN как число с плавающей запятой.

Из-за неявного приведения вверх все наши элементы были преобразованы в типы данных с плавающей запятой.

Элементы NaN также предшествуют каждому другому элементу, когда используются математические операции.

Пример 2: значение nan в консоли

import numpy as np

print(np.nan)

Выход:

Пример 3: Сравнение значений np.nan в Python

Вы можете использовать оператор двойного равенства(==) для сравнения двух значений nan в Python.

import numpy as np

print(np.nan == np.nan)

Выход:

np.isnan() — это библиотечная функция NumPy, которая поэлементно проверяет наличие NaN и возвращает результат в виде логического массива в Python. Она принимает входные данные в виде массива и необязательный выходной параметр. Например, если у вас есть массив x = [1, 2, np.nan], вы можете использовать функцию np.isnan(x), чтобы получить [False, False, True].

import numpy as np

print(np.isnan(np.nan))

Выход:

Часто задаваемые вопросы

Чем np.nan отличается от None?

Основное различие между None и np.nan заключается в том, что None используется в Python для представления отсутствия значения, а np.nan специально используется в NumPy для представления отсутствующих или нулевых числовых значений.

В отличие от None, np.nan является значением с плавающей запятой и имеет тип float.

Как проверить значения np.nan в массиве NumPy?

Вы можете использовать функцию np.isnan() для проверки значений np.nan в массиве NumPy. Функция np.isnan() возвращает логический массив со значениями True, если элементы входного массива являются np.nan, и значениями False, если элементы не являются np.nan.

Как заменить значения np.nan в массиве NumPy?

Вы можете использовать функцию np.where() для замены значений np.nan указанным значением в массиве Numpy.

import numpy as np

arr = np.array([1, 2, np.nan, 4, 5])

result = np.where(np.isnan(arr), 0, arr)

print(result)

Выход:

Как np.nan можно обрабатывать в вычислениях?

Когда вы используете np.nan в числовых операциях, он распространяется через вычисления и приводит к другому значению np.nan.

Добавить комментарий