J'essaye de compter combien de fois NaN apparaît dans une colonne d'une trame de données en utilisant ce code:

count = enron_df.loc['salary'].count('NaN')

Mais chaque fois que je lance ceci, j'obtiens l'erreur suivante:

KeyError: 'Level NaN must be same as name (None)'

J'ai beaucoup cherché sur le Web en essayant de trouver une solution, mais en vain.

11
Ian Dzindo 13 avril 2018 à 16:19

4 réponses

Meilleure réponse

Si les NaN sont des valeurs manquantes:

enron_df = pd.DataFrame({'salary':[np.nan, np.nan, 1, 5, 7]})
print (enron_df)
   salary
0     NaN
1     NaN
2     1.0
3     5.0
4     7.0

count = enron_df['salary'].isna().sum()
#alternative
#count = enron_df['salary'].isnull().sum()
print (count)
2

Si les NaN sont strings:

enron_df = pd.DataFrame({'salary':['NaN', 'NaN', 1, 5, 'NaN']})
print (enron_df)
  salary
0    NaN
1    NaN
2      1
3      5
4    NaN

count = enron_df['salary'].eq('NaN').sum()
#alternative
#count = (enron_df['salary'] == 'NaN').sum()
print (count)
3
14
nocibambi 18 déc. 2018 à 20:35

Essayez comme ceci:

count = df.loc[df['salary']=='NaN'].shape[0]

Ou peut-être mieux:

count = df.loc[df['salary']=='NaN', 'salary'].size

Et, sur votre chemin, vous auriez besoin de quelque chose comme ceci:

count = df.loc[:, 'salary'].str.count('NaN').sum()
4
zipa 13 avril 2018 à 13:26

Il y a aussi des valeurs avec l'argument dropna

import numpy as np
import pandas as pd

enron_df = pd.DataFrame({'salary':[np.nan, np.nan, 1, 5, 7]})

enron_df.salary.value_counts(dropna=False)
#NaN     2
# 7.0    1
# 5.0    1
# 1.0    1
#Name: salary, dtype: int64

Et si vous voulez juste le nombre, sélectionnez simplement np.NaN dans le nombre de valeurs. (S'il s'agit de chaînes 'NaN', remplacez simplement np.NaN par 'NaN')

enron_df.salary.value_counts(dropna=False)[np.NaN]
#2
3
ALollz 13 avril 2018 à 14:01

Par définition, count omet les NaN et size non.

Ainsi, une simple différence devrait faire

count = enron_df['salary'].size - enron_df['salary'].count()
5
rafaelc 13 avril 2018 à 16:35