Contando el número de faltantes/NaN en cada fila

1 minuto de lectura

Avatar de usuario de Chernyavski.aa
Chernyavski.aa

Tengo un conjunto de datos con una gran cantidad de filas. Algunos de los valores son NaN, así:

In [91]: df
Out[91]:
 1    3      1      1      1
 1    3      1      1      1
 2    3      1      1      1
 1    1    NaN    NaN    NaN
 1    3      1      1      1
 1    1      1      1      1

Y quiero contar la cantidad de valores de NaN en cada cadena, sería así:

In [91]: list = <somecode with df>
In [92]: list
    Out[91]:
     [0,
      0,
      0,
      3,
      0,
      0]

¿Cuál es la mejor y más rápida manera de hacerlo?

  • Pregunta similar para columnas: ¿Cómo obtengo un recuento resumido de datos faltantes/NaN por columna en ‘pandas’?

    – smci

    17 de noviembre de 2016 a las 10:59


Avatar de usuario de Zero
Cero

Primero podría encontrar si el elemento es NaN o no por isnull() y luego tomar por filas sum(axis=1)

In [195]: df.isnull().sum(axis=1)
Out[195]:
0    0
1    0
2    0
3    3
4    0
5    0
dtype: int64

Y, si desea la salida como lista, puede

In [196]: df.isnull().sum(axis=1).tolist()
Out[196]: [0, 0, 0, 3, 0, 0]

O usar count como

In [130]: df.shape[1] - df.count(axis=1)
Out[130]:
0    0
1    0
2    0
3    3
4    0
5    0
dtype: int64

Para contar NaN en filas específicas, use

cols = ['col1', 'col2']
df['number_of_NaNs'] = df[cols].isna().sum(1)

o indexe las columnas por posición, por ejemplo, cuente NaN en las primeras 4 columnas:

df['number_of_NaNs'] = df.iloc[:, :4].isna().sum(1)

¿Ha sido útil esta solución?