Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Machine Learning
avec Scikit-Learn
Voir le programme détaillé

Valeurs manquantes et valeurs spéciales avec NumPy

Tri, recherche et valeurs uniques Génération aléatoire moderne


Accès rapide :
Introduction
La valeur nan
Tester correctement nan
Infini positif et infini négatif
Remplacer les valeurs spéciales
Calculer malgré les valeurs manquantes
Conserver seulement les valeurs finies
Introduction aux tableaux masqués

Introduction

Les données réelles contiennent parfois des valeurs manquantes, invalides ou infinies. NumPy fournit des valeurs spéciales pour représenter ces situations, ainsi que des fonctions pour les détecter et les traiter correctement.

La valeur nan

La valeur np.nan signifie Not a Number. Elle est souvent utilisée pour représenter une valeur numérique manquante.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

values = np.array([10.0, np.nan, 30.0])

print(values)
print(values.mean())
Une valeur manquante dans un tableau

[10. nan 30.]
nan

Une seule valeur nan suffit à rendre la moyenne classique invalide.

Tester correctement nan

Une particularité de nan est qu'il n'est pas égal à lui-même. Il ne faut donc pas utiliser une comparaison classique pour le détecter.

 1 
 2 
 3 
 4 
import numpy as np

print(np.nan == np.nan)
print(np.isnan(np.nan))
Tester une valeur nan

False
True

Infini positif et infini négatif

NumPy sait aussi représenter l'infini positif et l'infini négatif avec np.inf et -np.inf. Les fonctions isnan, isinf et isfinite permettent d'analyser un tableau.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

values = np.array([1.0, np.nan, np.inf, -np.inf, 5.0])

print(np.isnan(values))
print(np.isinf(values))
print(np.isfinite(values))
Détection des valeurs spéciales

[False  True False False False]
[False False  True  True False]
[ True False False False  True]

Remplacer les valeurs spéciales

La fonction nan_to_num permet de remplacer les valeurs manquantes et infinies par des valeurs numériques choisies.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

values = np.array([1.0, np.nan, np.inf, -np.inf, 5.0])
clean = np.nan_to_num(values, nan=0.0, posinf=999.0, neginf=-999.0)

print(clean)
Nettoyage avec nan_to_num

[   1.    0.  999. -999.    5.]

Calculer malgré les valeurs manquantes

Certaines fonctions statistiques existent en version qui ignore les valeurs nan. C'est le cas de nanmean, nanmin ou nanmax.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

measures = np.array([12.0, np.nan, 15.0, 9.0])

print(np.mean(measures))
print(np.nanmean(measures))
Moyenne en ignorant nan

nan
12.0

Conserver seulement les valeurs finies

Pour certains traitements, la solution la plus simple consiste à retirer les valeurs non finies.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

values = np.array([1.0, np.nan, np.inf, -np.inf, 5.0])
finite = values[np.isfinite(values)]

print(finite)
Filtrage des valeurs finies

[1. 5.]

Introduction aux tableaux masqués

Les tableaux masqués permettent de conserver les données d'origine tout en indiquant que certaines valeurs doivent être ignorées dans les calculs.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

data = np.array([10, -1, 20, -1, 30])
masked = np.ma.masked_equal(data, -1)

print(masked)
print(masked.mean())
Utilisation d'un tableau masqué

[10 -- 20 -- 30]
20.0

Ici, la valeur -1 représente une donnée invalide. Elle reste présente dans le tableau, mais elle n'est pas prise en compte dans le calcul de la moyenne.

Tri, recherche et valeurs uniques Génération aléatoire moderne




Vous êtes un professionnel et vous avez besoin d'une formation ? Calcul scientifique
avec Python
Voir le programme détaillé