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

Kaggle
fuente

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
Jan van der Vegt
fuente
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
Icyblade
fuente
5

La forma simplista:

df.isnull().sum(axis=1)
Yuan JI
fuente
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.

Chris Ivan
fuente
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)
Rakesh Chaudhari
fuente
0

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

(df.isnull().sum() > 0).astype(np.int64).sum()
Neil Armstrong
fuente
-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
K3 --- rnc
fuente
-1

Si desea contar los valores faltantes:

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