web-dev-qa-db-ja.com

レベルNaNは名前と同じでなければなりません

このコードを使用して、データフレームの列にNaNが表示される回数をカウントしようとしています。

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

しかし、これを実行するたびに次のエラーが発生します:

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

私は解決策を見つけようとしてウェブをあちこち検索しましたが、役に立ちませんでした。

11
Ian Dzindo

NaNsが 欠損値 の場合:

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

NaNsが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

定義により、countNaNsを省略し、sizeは省略しません。

したがって、単純な違いを行う必要があります

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

このようにしてみてください:

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

または多分良い:

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

そして、あなたの道を行くには、次のようなものが必要です:

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

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 with 'NaN'

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