Come contare il numero di valori mancanti in ogni riga nel frame di dati Pandas?


17

Come posso ottenere il numero di valore mancante in ogni riga nel frame di dati di Pandas. Vorrei dividere i frame di dati in frame di dati diversi che hanno lo stesso numero di valori mancanti in ogni riga.

Qualche suggerimento?

Risposte:


19

Puoi applicare un conteggio sulle righe in questo modo:

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

produzione:

0:  3
1:  1
2:  0

Puoi aggiungere il risultato come una colonna come questa:

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

Risultato:

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

Ha funzionato perfettamente! Grazie.
Kaggle,

40

Quando si utilizza panda, cercare di evitare di eseguire qualunque operazione in un ciclo, tra cui apply, map, applymapecc Questo è lento!

Se vuoi contare i valori mancanti in ogni colonna, prova:

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

D'altra parte, puoi contare in ogni riga (che è la tua domanda):

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

È circa 10 volte più veloce della soluzione di Jan van der Vegt (a proposito, conta valori validi, piuttosto che valori mancanti):

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

Oppure, potresti semplicemente utilizzare il metodo info per gli oggetti dataframe:

df.info()

che fornisce conteggi di valori non nulli per ogni colonna.


2

valori null lungo la colonna,

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

valori vuoti lungo la colonna,

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

valori null lungo la riga,

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

valori vuoti lungo la riga,

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

0

Questo frammento restituirà il valore intero del numero totale di colonne con valore mancante:

(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 vuoi contare i valori mancanti:

np.logical_not(df.isnull()).sum()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.