
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
