Como contar o número de valores ausentes em cada linha no dataframe do Pandas?


16

Como posso obter o número de valores ausentes em cada linha no dataframe do Pandas. Gostaria de dividir o quadro de dados em diferentes quadros de dados que tenham o mesmo número de valores ausentes em cada linha.

Alguma sugestão?

Respostas:


19

Você pode aplicar uma contagem nas linhas assim:

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

resultado:

0:  3
1:  1
2:  0

Você pode adicionar o resultado como uma coluna como esta:

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

Resultado:

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

Funcionou perfeitamente! Valeu.
Kaggle

39

Ao usar pandas, para tentar evitar operações que executam em um loop, incluindo apply, map, applymapetc. Isso é lento!

Se você deseja contar os valores ausentes em cada coluna, tente:

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

Por outro lado, você pode contar em cada linha (qual é a sua pergunta):

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

É aproximadamente 10 vezes mais rápido que a solução de Jan van der Vegt (BTW conta valores válidos, em vez de valores ausentes):

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

Ou você pode simplesmente usar o método info para objetos de quadro de dados:

df.info()

que fornece contagens de valores não nulos para cada coluna.


2

valores nulos ao longo da coluna,

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

valores em branco ao longo da coluna,

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

valores nulos ao longo da linha,

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

valores em branco ao longo da linha,

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

0

Esse snippet retornará o valor inteiro do número total de colunas com valor ausente:

(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

Se você deseja contar os valores ausentes:

np.logical_not(df.isnull()).sum()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.