web-dev-qa-db-fra.com

Le niveau NaN doit être identique au nom

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

Si NaNs sont 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 NaNs 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
13
jezrael

Par définition, count omet NaNs et size non.

Ainsi, une simple différence devrait faire

count = enron_df['salary'].size - enron_df['salary'].count()
5
rafaelc

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()
3
zipa

Il y a aussi des comptes de valeur 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 numéro, sélectionnez simplement np.NaN à partir du nombre de valeurs. (S'il s'agit de chaînes 'NaN', puis remplacez simplement np.NaN avec 'NaN')

enron_df.salary.value_counts(dropna=False)[np.NaN]
#2
3
ALollz