¿Cómo contar el número de valores faltantes en cada fila en el marco de datos de Pandas?


17

¿Cómo puedo obtener el número de valores faltantes en cada fila en el marco de datos de Pandas? Me gustaría dividir el marco de datos en diferentes marcos de datos que tengan el mismo número de valores faltantes en cada fila.

¿Cualquier sugerencia?

Respuestas:


19

Puede aplicar un recuento sobre las filas de esta manera:

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

salida:

0:  3
1:  1
2:  0

Puede agregar el resultado como una columna 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

Funcionó perfectamente! Gracias.
Kaggle

40

Al utilizar los pandas, tratar de evitar las operaciones que se realizan en un bucle, incluyendo apply, map, applymapetc Eso es lento!

Si desea contar los valores faltantes en cada columna, intente:

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

Por otro lado, puede contar en cada fila (que es su pregunta) de la siguiente manera:

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

Es aproximadamente 10 veces más rápido que la solución de Jan van der Vegt (por cierto cuenta valores válidos, en lugar de valores perdidos):

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

O bien, simplemente puede utilizar el método de información para objetos de marco de datos:

df.info()

que proporciona recuentos de valores no nulos para cada columna.


2

valores nulos a lo largo de la columna,

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

valores en blanco a lo largo de la columna,

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

valores nulos a lo largo de la fila,

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

valores en blanco a lo largo de la fila,

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

0

Este fragmento devolverá el valor entero del número total de columnas con valor perdido:

(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

Si desea contar los valores faltantes:

np.logical_not(df.isnull()).sum()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.