Как получить итоговое количество отсутствующих /NaN данных по столбцу в 'pandas'?

В R я могу быстро увидеть количество отсутствующих данных с помощью команды summary, но эквивалентный pandas метод DataFrame describe не сообщает эти значения.

Я собираюсь сделать что-то вроде

len(mydata.index) - mydata.count()

чтобы вычислить количество отсутствующих значений для каждого столбца, но мне интересно, есть ли более совершенная идиома (или мой подход даже прав).

Ответ 1

Оба describe и info сообщают о количестве не пропущенных значений.

In [1]: df = DataFrame(np.random.randn(10,2))

In [2]: df.iloc[3:6,0] = np.nan

In [3]: df
Out[3]: 
          0         1
0 -0.560342  1.862640
1 -1.237742  0.596384
2  0.603539 -1.561594
3       NaN  3.018954
4       NaN -0.046759
5       NaN  0.480158
6  0.113200 -0.911159
7  0.990895  0.612990
8  0.668534 -0.701769
9 -0.607247 -0.489427

[10 rows x 2 columns]

In [4]: df.describe()
Out[4]: 
              0          1
count  7.000000  10.000000
mean  -0.004166   0.286042
std    0.818586   1.363422
min   -1.237742  -1.561594
25%   -0.583795  -0.648684
50%    0.113200   0.216699
75%    0.636036   0.608839
max    0.990895   3.018954

[8 rows x 2 columns]


In [5]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10 entries, 0 to 9
Data columns (total 2 columns):
0    7 non-null float64
1    10 non-null float64
dtypes: float64(2)

Чтобы получить количество отсутствующих, ваш soln правильный

In [20]: len(df.index)-df.count()
Out[20]: 
0    3
1    0
dtype: int64

Вы тоже можете сделать это

In [23]: df.isnull().sum()
Out[23]: 
0    3
1    0
dtype: int64

Ответ 2

Как крошечное дополнение, чтобы получить процент, отсутствующий в столбце DataFrame, комбинируя ответы @Jeff и @userS выше, вы получаете:

df.isnull().sum()/len(df)*100

Ответ 3

Это не совсем полное резюме, но оно даст вам быстрое представление о ваших данных на уровне столбцов

def getPctMissing(series):
    num = series.isnull().sum()
    den = series.count()
    return 100*(num/den)

Ответ 4

Я пока не могу комментировать, но добавлю ответ Джеффу, но если вам было все равно, какие столбцы были Нан, и вы просто хотели проверить общий просто добавьте второй .sum(), чтобы получить одно значение.

result = df.isnull().sum().sum()
result > 0

a Series понадобится только один .sum(), а Panel() потребуется три

Ответ 5

Следующий будет делать трюк и будет возвращать количество нулей для каждого столбца:

df.isnull().sum(axis=0)

df.isnull() возвращает фрейм данных со значениями True/False
sum(axis=0) суммирует значения во всех строках столбца