web-dev-qa-db-fra.com

Comment obtenir un décompte récapitulatif des données manquantes/NaN par colonne dans "pandas"?

DansR, je peux rapidement voir le nombre de données manquantes à l'aide de la commande summary, mais la méthode équivalente pandas DataFrame, describe ne rapporte pas ces valeurs.

Je suppose que je peux faire quelque chose comme

len(mydata.index) - mydata.count()

pour calculer le nombre de valeurs manquantes pour chaque colonne, mais je me demande s'il existe un meilleur idiome (ou si mon approche est même correcte).

21
orome

describe et info indiquent tous deux le nombre de valeurs non manquantes.

In [1]: df = DataFrame(np.random.randn(10,2))

In [2]: df.iloc[3:6,0] = np.nan

In [3]: df
Out[3]: 
          0         1
0 -0.560342  1.862640
1 -1.237742  0.596384
2  0.603539 -1.561594
3       NaN  3.018954
4       NaN -0.046759
5       NaN  0.480158
6  0.113200 -0.911159
7  0.990895  0.612990
8  0.668534 -0.701769
9 -0.607247 -0.489427

[10 rows x 2 columns]

In [4]: df.describe()
Out[4]: 
              0          1
count  7.000000  10.000000
mean  -0.004166   0.286042
std    0.818586   1.363422
min   -1.237742  -1.561594
25%   -0.583795  -0.648684
50%    0.113200   0.216699
75%    0.636036   0.608839
max    0.990895   3.018954

[8 rows x 2 columns]


In [5]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10 entries, 0 to 9
Data columns (total 2 columns):
0    7 non-null float64
1    10 non-null float64
dtypes: float64(2)

Pour obtenir le décompte des disparus, votre solution est correcte

In [20]: len(df.index)-df.count()
Out[20]: 
0    3
1    0
dtype: int64

Tu pourrais faire ça aussi

In [23]: df.isnull().sum()
Out[23]: 
0    3
1    0
dtype: int64
33
Jeff

Ce n'est pas un résumé complet, mais cela vous donnera une idée rapide de vos données au niveau des colonnes.

def getPctMissing(series):
    num = series.isnull().sum()
    den = series.count()
    return 100*(num/den)
3
userS

En outre, pour obtenir le pourcentage manquant dans la colonne DataFrame, la combinaison des réponses @Jeff et @ userS ci-dessus vous permet d'obtenir:

df.isnull().sum()/len(df)*100
3
Ricky McMaster

Je ne peux pas encore faire de commentaires, mais ajouter quelque chose à la réponse de Jeff, mais Si vous ne vous souciez pas des colonnes qui contiennent Nan et que vous vouliez simplement vérifier dans l'ensemble. valeur.

result = df.isnull().sum().sum()
result > 0

une série n'aurait besoin que d'un .sum () et un panel () aurait besoin de trois

0
Drafter250