Як підрахувати кількість пропущених значень у кожному рядку в рамках даних Pandas?


17

Як я можу отримати кількість пропущених значень у кожному рядку в даних фрейму даних Pandas. Я хотів би розділити кадр даних на різні рамки даних, у яких однакова кількість відсутніх значень у кожному рядку.

Будь-яка пропозиція?

Відповіді:


19

Ви можете застосувати підрахунок до таких рядків:

test_df.apply(lambda x: x.count(), axis=1)

test_df:

    A   B   C
0:  1   1   3
1:  2   nan nan
2:  nan nan nan

вихід:

0:  3
1:  1
2:  0

Ви можете додати результат у такому стовпці:

test_df['full_count'] = test_df.apply(lambda x: x.count(), axis=1)

Результат:

    A   B   C   full_count
0:  1   1   3   3
1:  2   nan nan 1
2:  nan nan nan 0

Працювали чудово! Дякую.
Kaggle

41

При використанні панд, намагаюся уникати виконання операцій в циклі, в тому числі apply, map, і applymapт.д. Це повільно!

Якщо ви хочете порахувати відсутні значення у кожному стовпці, спробуйте:

df.isnull().sum() або df.isnull().sum(axis=0)

З іншого боку, ви можете порахувати в кожному рядку (це ваше питання) за:

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

Це приблизно в 10 разів швидше, ніж рішення Яна ван дер Вегта (BTW він рахує дійсні значення, а не пропущені значення):

In [18]: %timeit -n 1000 df.apply(lambda x: x.count(), axis=1)
1000 loops, best of 3: 3.31 ms per loop

In [19]: %timeit -n 1000 df.isnull().sum(axis=1)
1000 loops, best of 3: 329 µs per loop


4

Або ви можете просто скористатися методом інформації для об'єктів фрейму даних:

df.info()

що забезпечує підрахунок ненульових значень для кожного стовпця.


2

нульові значення вздовж стовпця,

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

порожні значення вздовж стовпця,

c = (df == '').sum(axis=0)

нульові значення вздовж рядка,

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

порожні значення вздовж рядка,

c = (df == '').sum(axis=1)

0

Цей фрагмент поверне ціле значення загальної кількості стовпців з пропущеним значенням:

(df.isnull().sum() > 0).astype(np.int64).sum()

-1
>>> df = pd.DataFrame([[1, 2, np.nan],
...                    [np.nan, 3, 4],
...                    [1, 2,      3]])

>>> df
    0  1   2
0   1  2 NaN
1 NaN  3   4
2   1  2   3

>>> df.count(axis=1)
0    2
1    2
2    3
dtype: int64

-1

Якщо ви хочете порахувати відсутні значення:

np.logical_not(df.isnull()).sum()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.