Уровень 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