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