Skip to content

pandas : Détecter et compter les valeurs manquantes (NaN) avec isnull(), isna()

Cet article décrit comment vérifier si pandas.DataFrame et Series contiennent des valeurs manquantes et compter le nombre de valeurs manquantes et non manquantes.

  • Détecter les valeurs manquantes avec isnull() et isna()
  • Vérifier si tous les éléments d’une ligne et d’une colonne manquent de valeurs
  • Vérifier si une ligne et une colonne contiennent au moins une valeur manquante
  • Compter les valeurs manquantes dans chaque ligne et colonne
  • Compter les valeurs non manquantes dans chaque ligne et colonne
  • Compter le nombre total de valeurs manquantes
  • Compter le nombre total de valeurs non manquantes
  • Vérifiez si pandas.DataFrame contient au moins une valeur manquante
  • Pour les pandas.Série

Consultez les articles suivants pour savoir comment supprimer et remplacer les valeurs manquantes.

Consultez les articles suivants sur la façon de compter les éléments qui remplissent certaines conditions, pas seulement NaN.

Notez que non seulement NaN (Not a Number) mais aussi None est traité comme une valeur manquante dans les pandas.

Par exemple, lisez un fichier CSV avec des valeurs manquantes avec read_csv(). N’utilisez que les trois premières rangées.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')[:3]
print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN

Détecter les valeurs manquantes avec isnull() et isna()

pandas.DataFrame et Series ont les méthodes isnull() et isna(). Des exemples de pandas.Series sont présentés à la fin. Notez que la méthode isnan() n’est pas fournie.

Vrai pour les valeurs manquantes, Faux pour les valeurs non manquantes :

print(df.isnull())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True

print(df.isna())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True

isnull() est un alias pour isna(), dont l’utilisation est la même. isnull() est principalement utilisé dans cet article, mais vous pouvez le remplacer par isna().

notnull() et notna() sont également fournis, qui renvoient True si la valeur n’est pas manquante et False si la valeur est manquante. notnull() est un alias pour notna()

print(df.notnull())
#     name    age  state  point  other
# 0   True   True   True  False  False
# 1  False  False  False  False  False
# 2   True  False   True  False  False

print(df.notna())
#     name    age  state  point  other
# 0   True   True   True  False  False
# 1  False  False  False  False  False
# 2   True  False   True  False  False

Notez que NaN renvoie toujours False pour == et True pour !=.

print(df == float('nan'))
#     name    age  state  point  other
# 0  False  False  False  False  False
# 1  False  False  False  False  False
# 2  False  False  False  False  False

print(df != float('nan'))
#    name   age  state  point  other
# 0  True  True   True   True   True
# 1  True  True   True   True   True
# 2  True  True   True   True   True

Vérifier si tous les éléments d’une ligne et d’une colonne manquent de valeurs

all() renvoie True si tous les éléments de chaque ligne et colonne sont True.

En appelant all() à partir du résultat de isnull(), vous pouvez vérifier si tous les éléments de chaque ligne et colonne manquent de valeurs.

Par défaut, il est appliqué aux colonnes. Si l’argument axis=1, il est appliqué aux lignes.

print(df.isnull().all())
# name     False
# age      False
# state    False
# point     True
# other     True
# dtype: bool

print(df.isnull().all(axis=1))
# 0    False
# 1     True
# 2    False
# dtype: bool

Vérifier si une ligne et une colonne contiennent au moins une valeur manquante

any() renvoie True s’il y a au moins un True dans chaque ligne et colonne.

En appelant any() à partir du résultat de isnull(), vous pouvez vérifier si chaque ligne et colonne contient au moins une valeur manquante.

Par défaut, il est appliqué aux colonnes. Si l’argument axis=1, il est appliqué aux lignes.

print(df.isnull().any())
# name     True
# age      True
# state    True
# point    True
# other    True
# dtype: bool

print(df.isnull().any(axis=1))
# 0    True
# 1    True
# 2    True
# dtype: bool

Compter les valeurs manquantes dans chaque ligne et colonne

sum() calcule la somme des éléments pour chaque ligne et colonne.

Étant donné que sum() est calculé comme True=1 et False=0, vous pouvez compter le nombre de valeurs manquantes dans chaque ligne et colonne en appelant sum() à partir du résultat de isnull().

Vous pouvez compter les valeurs manquantes dans chaque colonne par défaut, et dans chaque ligne avec axe=1.

print(df.isnull().sum())
# name     1
# age      2
# state    1
# point    3
# other    3
# dtype: int64

print(df.isnull().sum(axis=1))
# 0    2
# 1    5
# 2    3
# dtype: int64

Compter les valeurs non manquantes dans chaque ligne et colonne

count() compte le nombre de valeurs non manquantes (= valeurs existantes) dans chaque ligne et colonne.

Appelez-le directement depuis le pandas.DataFrame d’origine, et non depuis le résultat de isnull().

Vous pouvez compter les valeurs non manquantes dans chaque colonne par défaut et dans chaque ligne avec axe=1.

print(df.count())
# name     2
# age      1
# state    2
# point    0
# other    0
# dtype: int64

print(df.count(axis=1))
# 0    3
# 1    0
# 2    2
# dtype: int64

Compter le nombre total de valeurs manquantes

Vous pouvez obtenir toutes les données sous la forme d’un tableau NumPy numpy.ndarray avec l’attribut values ​​de pandas.DataFrame.

print(df.isnull().values)
# [[False False False  True  True]
#  [ True  True  True  True  True]
#  [False  True False  True  True]]

print(type(df.isnull().values))
# <class 'numpy.ndarray'>

Contrairement à pandas.DataFrame, sum() de numpy.ndarray calcule la somme de tous les éléments par défaut.

Par conséquent, en appelant sum() à partir de l’attribut values ​​(numpy.ndarray) du résultat de isnull(), vous pouvez obtenir le nombre total de valeurs manquantes.

print(df.isnull().values.sum())
# 10

Compter le nombre total de valeurs non manquantes

Vous pouvez obtenir le nombre total d’éléments non manquants en additionnant le nombre de chaque ligne et colonne obtenu par count() avec sum().

print(df.count().sum())
# 5

Vous pouvez également appeler sum() à partir de l’attribut values ​​(numpy.ndarray) du résultat de notnull() ou notna() (où l’élément non manquant est True).

print(df.notnull().values.sum())
# 5

Vérifiez si pandas.DataFrame contient au moins une valeur manquante

En utilisant le nombre total de valeurs manquantes indiqué ci-dessus, vous pouvez vérifier si pandas.DataFrame contient au moins une valeur manquante.

Si le nombre total de valeurs manquantes n’est pas nul, cela signifie que pandas.DataFrame contient au moins une valeur manquante.

print(df.isnull().values.sum() != 0)
# True

Si le nombre total de valeurs manquantes est égal à l’attribut size (le nombre de tous les éléments), cela signifie que tous les éléments sont des valeurs manquantes.

print(df.size)
# 15

print(df.isnull().values.sum() == df.size)
# False

Pour les pandas.Série

pandas.Series a également des méthodes telles que isnull(), isna(), notnull() et notna(). Il peut être géré de la même manière que les exemples ci-dessus de pandas.DataFrame.

s = df['state']
print(s)
# 0     NY
# 1    NaN
# 2     CA
# Name: state, dtype: object

print(s.isnull())
# 0    False
# 1     True
# 2    False
# Name: state, dtype: bool

print(s.notnull())
# 0     True
# 1    False
# 2     True
# Name: state, dtype: bool

print(s.isnull().any())
# True

print(s.isnull().all())
# False

print(s.isnull().sum())
# 1

print(s.count())
# 2