Domanda

Come posso ottenere il numero di valore mancante in ogni riga Panda dataframe. Vorrei dividere dataframe diverse dataframes che hanno stesso numero di valori mancanti in ciascuna riga.

Ogni suggerimento?

È stato utile?

Soluzione

È possibile applicare un conteggio sopra le 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

uscita:

0:  3
1:  1
2:  0

È possibile aggiungere il risultato come una colonna in questo modo:

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

Altri suggerimenti

Quando si utilizza panda, cercare di evitare l'esecuzione di operazioni in un ciclo, tra cui apply, map, applymap ecc Questo è lento!

Se si desidera contare i valori mancanti in ogni colonna, provare:

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

D'altra parte, si può contare in ogni riga (che è la tua domanda) da:

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

E 'circa 10 volte più veloce di Jan van der soluzione Vegt (BTW egli conta i valori validi, piuttosto che i 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

Il modo più semplice:

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

In alternativa, si può semplicemente utilizzare il metodo di informazioni per dataframe oggetti:

df.info()

che fornisce conteggi di valori non nulli per ciascuna colonna.

>>> 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

Se si vuole conteggio dei valori mancanti:

np.logical_not(df.isnull()).sum()

valori nulli lungo la colonna,

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

valori vuoti lungo la colonna,

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

valori nulli lungo la fila,

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

valori vuoti lungo la fila,

c = (df == '').sum(axis=1)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top