Respuestas:
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
Al utilizar los pandas, tratar de evitar las operaciones que se realizan en un bucle, incluyendo apply
, map
, applymap
etc 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
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.
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)
Este fragmento devolverá el valor entero del número total de columnas con valor perdido:
(df.isnull().sum() > 0).astype(np.int64).sum()
>>> 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