Pandas : comment trouver des valeurs uniques et ignorer NaN
Vous pouvez définir la fonction personnalisée suivante pour rechercher des valeurs uniques dans les pandas et ignorer les valeurs NaN :
def unique_no_nan(x): return x.dropna().unique()
Cette fonction renverra une série pandas qui contient chaque valeur unique à l’exception des valeurs NaN.
Les exemples suivants montrent comment utiliser cette fonction dans différents scénarios avec le DataFrame pandas suivant :
import pandas as pd import numpy as np #create DataFrame df = pd.DataFrame({'team': ['Mavs', 'Mavs', 'Mavs', 'Celtics', 'Celtics', 'Celtics'], 'points': [95, 95, 100, 113, 100, np.nan]}) #view DataFrame print(df) team points 0 Mavs 95.0 1 Mavs 95.0 2 Mavs 100.0 3 Celtics 113.0 4 Celtics 100.0 5 Celtics NaN
Exemple 1 : rechercher des valeurs uniques dans la colonne Pandas et ignorer les valeurs NaN
Supposons que nous utilisions la fonction pandas unique() pour afficher toutes les valeurs uniques dans la colonne points du DataFrame :
#display unique values in 'points' column df['points'].unique() array([ 95., 100., 113., nan])
Notez que la fonction unique() inclut nan dans les résultats par défaut.
Cependant, supposons que nous utilisions plutôt notre fonction personnalisée unique_no_nan() pour afficher les valeurs uniques dans la colonne des points :
#display unique values in 'points' column and ignore NaN unique_no_nan(df['points']) array([ 95., 100., 113.])
Notre fonction renvoie chaque valeur unique dans la colonne des points , sans compter NaN.
Exemple 2 : Rechercher des valeurs uniques dans Pandas Groupby et ignorer les valeurs NaN
Supposons que nous utilisions les fonctions pandas groupby() et agg() pour afficher toutes les valeurs uniques dans la colonne points , regroupées par la colonne équipe :
#display unique values in 'points' column grouped by team df.groupby('team')['points'].agg(['unique']) unique team Celtics [113.0, 100.0, nan] Mavs [95.0, 100.0]
Notez que la fonction unique() inclut nan dans les résultats par défaut.
Cependant, supposons que nous utilisions plutôt notre fonction personnalisée unique_no_nan() pour afficher les valeurs uniques dans la colonne des points , regroupées par la colonne de l’ équipe :
#display unique values in 'points' column grouped by team and ignore NaN df.groupby('team')['points'].apply(lambda x: unique_no_nan(x)) team Celtics [113.0, 100.0] Mavs [95.0, 100.0] Name: points, dtype: object
Notre fonction renvoie chaque valeur unique dans la colonne des points pour chaque équipe , sans compter les valeurs NaN.
Ressources additionnelles
Les didacticiels suivants expliquent comment exécuter d’autres fonctions courantes dans les pandas :
Pandas : Comment sélectionner des lignes uniques dans DataFrame
Pandas : Comment obtenir des valeurs uniques à partir de la colonne d’index
Pandas : comment compter les combinaisons uniques de deux colonnes