Уровень NaN должен быть таким же, как имя

Я пытаюсь подсчитать, сколько раз NaN появляется в столбце блока данных, используя этот код:

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

Но каждый раз, когда я запускаю это, я получаю следующую ошибку:

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

Я много раз искал в Интернете, пытаясь найти решение, но безрезультатно.

Ответ 1

Если NaN отсутствуют значения:

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

Если NaN - 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

Ответ 2

По определению count omits NaN а size - нет.

Таким образом, простая разница должна

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

Ответ 3

Попробуйте вот так:

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

Или, может быть, лучше:

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

И, идя по вашему пути, вам нужно что-то вроде этого:

count = df.loc[:, 'salary'].str.count('NaN').sum()

Ответ 4

Там также подсчитывается значение с аргументом 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

И если вы просто хотите номер, просто выберите np.NaN из значений. (Если они являются строками 'NaN', то просто замените np.NaN на 'NaN')

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