Как посчитать количество пропущенных значений в каждой строке в кадре данных Pandas?


17

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

Любое предложение?

Ответы:


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

40

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

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

df.isnull().sum() или же df.isnull().sum(axis=0)

С другой стороны, вы можете рассчитывать в каждой строке (это ваш вопрос) по:

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

Это примерно в 10 раз быстрее, чем решение Яна ван дер Вегта (кстати, он считает правильные значения, а не пропущенные значения):

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

Или вы можете просто использовать метод info для объектов dataframe:

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.