web-dev-qa-db-fra.com

Comment compter les valeurs nan dans un DataFrame de pandas?

Quel est le meilleur moyen de comptabiliser (pas un nombre) nan les valeurs dans un DataFrame de pandas?

Le code suivant:

import numpy as np
import pandas as pd
dfd = pd.DataFrame([1, np.nan, 3, 3, 3, np.nan], columns=['a'])
dfv = dfd.a.value_counts().sort_index()
print("nan: %d" % dfv[np.nan].sum())
print("1: %d" % dfv[1].sum())
print("3: %d" % dfv[3].sum())
print("total: %d" % dfv[:].sum())

Les sorties:

nan: 0
1: 1
3: 3
total: 4

Alors que la sortie souhaitée est:

nan: 2
1: 1
3: 3
total: 6

J'utilise des pandas 0.17 avec Python 3.5.0 avec Anaconda 2.4.0.

11
SpeedCoder5

Si vous voulez compter uniquement les valeurs NaN dans la colonne 'a' d'un DataFrame df, utilisez:

len(df) - df['a'].count()

Ici, count() nous indique le nombre de valeurs non-NaN, soustrait du nombre total de valeurs (donné par len(df)).

Pour compter les valeurs NaN dans la colonne chaque de df, utilisez:

len(df) - df.count()

Si vous voulez utiliser value_counts, dites-lui pas de supprimer les valeurs NaN en définissant dropna=False (ajouté dans 0.14.1 ):

dfv = dfd['a'].value_counts(dropna=False)

Cela permet également de compter les valeurs manquantes dans la colonne:

 3     3
NaN    2
 1     1
Name: a, dtype: int64

Le reste de votre code devrait alors fonctionner comme prévu (notez qu'il n'est pas nécessaire d'appeler sum; il suffit que print("nan: %d" % dfv[np.nan]) suffise).

8
Alex Riley

Pour compter uniquement les valeurs NULL, vous pouvez utiliser isnull()

In [11]:
dfd.isnull().sum()

Out[11]:
a    2
dtype: int64

Ici a est le nom de la colonne et il y a 2 occurrences de la valeur null dans la colonne.

19
ilyas patanam

Un bon moyen de compter tous les NaN dans toutes les colonnes de votre base de données serait ...

import pandas as pd 
import numpy as np


df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})
print(df.isna().sum().sum())

En utilisant une somme unique, vous obtenez le nombre de NaN pour chaque colonne. La deuxième somme, somme ces sommes de la colonne.

1
Thom Ives