
Pour supprimer les lignes et les colonnes contenant des valeurs manquantes NaN dans le tableau NumPy numpy.ndarray, vérifiez NaN avec np.isnan() et extrayez les lignes et les colonnes qui ne contiennent pas NaN avec any() ou all() .
Cet article décrit le contenu suivant.
- Supprimer toutes les valeurs manquantes (NaN)
- Supprimer les lignes contenant des valeurs manquantes (NaN)
- Supprimer les colonnes contenant des valeurs manquantes (NaN)
Si vous souhaitez remplacer la valeur manquante par une autre valeur au lieu de la supprimer, consultez l’article suivant.
Consultez les articles suivants pour savoir comment supprimer des lignes et des colonnes à n’importe quelle position, ainsi que des lignes et des colonnes qui remplissent les conditions.
Par exemple, lisez le CSV suivant avec des données manquantes avec np.genfromtxt().
import numpy as np
a = np.genfromtxt('data/src/sample_nan.csv', delimiter=',')
print(a)
# [[11. 12. nan 14.]
# [21. nan nan 24.]
# [31. 32. 33. 34.]]
Supprimer toutes les valeurs manquantes (NaN)
Par np.isnan(), vous pouvez obtenir ndarray dont les valeurs manquantes sont True et les autres sont False.
print(np.isnan(a))
# [[False False True False]
# [False True True False]
# [False False False False]]
En utilisant l’opérateur de négation ~ pour ce ndarray et en définissant NaN sur False, les valeurs manquantes peuvent être supprimées (= les valeurs non manquantes sont extraites). Comme le nombre d’éléments restants est différent, la forme du tableau d’origine n’est pas conservée et est aplatie.
print(~np.isnan(a))
# [[ True True False True]
# [ True False False True]
# [ True True True True]]
print(a[~np.isnan(a)])
# [11. 12. 14. 21. 24. 31. 32. 33. 34.]
Supprimer les lignes contenant des valeurs manquantes (NaN)
Pour supprimer les lignes contenant des valeurs manquantes, utilisez la méthode any() qui renvoie True s’il y a au moins un True dans ndarray.
Avec l’argument axis=1, any() teste s’il y a au moins un True pour chaque ligne.
print(np.isnan(a).any(axis=1))
# [ True True False]
Utilisez l’opérateur de négation ~ pour rendre les lignes sans valeurs manquantes True.
print(~np.isnan(a).any(axis=1))
# [False False True]
En appliquant ce tableau booléen à la première dimension (= ligne) du tableau d’origine, les lignes contenant les valeurs manquantes sont supprimées (= les lignes contenant les valeurs manquantes sont extraites).
print(a[~np.isnan(a).any(axis=1), :])
# [[31. 32. 33. 34.]]
Vous pouvez omettre la spécification de colonne : comme indiqué ci-dessous.
print(a[~np.isnan(a).any(axis=1)])
# [[31. 32. 33. 34.]]
Si vous souhaitez supprimer uniquement les lignes où tous les éléments sont NaN, utilisez all() au lieu de any().
Un exemple utilisant all() est présenté ci-dessous.
Supprimer les colonnes contenant des valeurs manquantes (NaN)
Il en va de même lors de la suppression de colonnes contenant des valeurs manquantes.
Avec l’argument axis=0, any() teste s’il y a au moins un True pour chaque colonne. Utilisez l’opérateur de négation ~ pour rendre les colonnes sans valeurs manquantes True.
print(~np.isnan(a).any(axis=0))
# [ True False False True]
En appliquant ce tableau booléen à la deuxième dimension (= colonne) du tableau d’origine, les colonnes contenant les valeurs manquantes sont supprimées (= les colonnes contenant les valeurs manquantes sont extraites).
print(a[:, ~np.isnan(a).any(axis=0)])
# [[11. 14.]
# [21. 24.]
# [31. 34.]]
Si vous souhaitez supprimer uniquement les colonnes où tous les éléments sont NaN, utilisez all() au lieu de any().
a = np.genfromtxt('data/src/sample_nan.csv', delimiter=',')
a[2, 2] = np.nan
print(a)
# [[11. 12. nan 14.]
# [21. nan nan 24.]
# [31. 32. nan 34.]]
print(a[:, ~np.isnan(a).any(axis=0)])
# [[11. 14.]
# [21. 24.]
# [31. 34.]]
print(a[:, ~np.isnan(a).all(axis=0)])
# [[11. 12. 14.]
# [21. nan 24.]
# [31. 32. 34.]]