Skip to content

pandas : Extraire les lignes/colonnes avec des valeurs manquantes (NaN)

Vous pouvez extraire des lignes/colonnes contenant des valeurs manquantes de pandas.DataFrame en utilisant la méthode isnull() ou isna() qui vérifie si un élément est une valeur manquante.

Cet article décrit le contenu suivant.

  • Extraire les lignes/colonnes avec des valeurs manquantes dans des colonnes/lignes spécifiques
  • Extraire les lignes/colonnes avec au moins une valeur manquante

Utilisez la méthode dropna() pour extraire les lignes/colonnes où tous les éléments sont des valeurs non manquantes, c’est-à-dire supprimer les lignes/colonnes contenant des valeurs manquantes. Voir l’article suivant pour plus de détails.

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().

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')
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
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

Extraire les lignes/colonnes avec des valeurs manquantes dans des colonnes/lignes spécifiques

Vous pouvez utiliser la méthode isnull() ou isna() de pandas.DataFrame et Series pour vérifier si chaque élément est une valeur manquante ou non.

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
# 3  False  False  False  False   True
# 4  False   True  False  False   True
# 5  False  False   True   True   True

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

Si vous souhaitez extraire des lignes avec des valeurs manquantes dans une colonne spécifique, utilisez le résultat de isnull() pour cette colonne.

print(df['point'].isnull())
# 0     True
# 1     True
# 2     True
# 3    False
# 4    False
# 5     True
# Name: point, dtype: bool

print(df[df['point'].isnull()])
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 5    Frank  30.0   NaN    NaN    NaN

Le concept est le même lors de l’extraction de colonnes avec des valeurs manquantes dans une ligne spécifique. Utilisez loc[] pour sélectionner par nom (étiquette) et iloc[] pour sélectionner par position.

print(df.iloc[2].isnull())
# name     False
# age       True
# state    False
# point     True
# other     True
# Name: 2, dtype: bool

print(df.loc[:, df.iloc[2].isnull()])
#     age  point  other
# 0  24.0    NaN    NaN
# 1   NaN    NaN    NaN
# 2   NaN    NaN    NaN
# 3  68.0   70.0    NaN
# 4   NaN   88.0    NaN
# 5  30.0    NaN    NaN

Extraire les lignes/colonnes avec au moins une valeur manquante

Pour utiliser comme exemple, supprimez les lignes et les colonnes où toutes les valeurs sont des valeurs manquantes.

df2 = df.dropna(how='all').dropna(how='all', axis=1)
print(df2)
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 2  Charlie   NaN    CA    NaN
# 3     Dave  68.0    TX   70.0
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

Utilisez la méthode any() qui renvoie True s’il y a au moins un True dans chaque ligne/colonne. Par défaut, il est appliqué aux colonnes. Si axe=1, il est appliqué aux lignes.

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

Extrayez les lignes contenant au moins une valeur manquante :

print(df2.isnull())
#     name    age  state  point
# 0  False  False  False   True
# 2  False   True  False   True
# 3  False  False  False  False
# 4  False   True  False  False
# 5  False  False   True   True

print(df2.isnull().any(axis=1))
# 0     True
# 2     True
# 3    False
# 4     True
# 5     True
# dtype: bool

print(df2[df2.isnull().any(axis=1)])
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 2  Charlie   NaN    CA    NaN
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

Extrayez les colonnes contenant au moins une valeur manquante :

print(df2.isnull().any())
# name     False
# age       True
# state     True
# point     True
# dtype: bool

print(df2.loc[:, df2.isnull().any()])
#     age state  point
# 0  24.0    NY    NaN
# 2   NaN    CA    NaN
# 3  68.0    TX   70.0
# 4   NaN    CA   88.0
# 5  30.0   NaN    NaN