¿Cómo cuento los valores que faltan en cada columna con pandas?
Cuenta los vacíos de cada columna, en números y en porcentaje, y descubre qué columnas se vacían juntas.
Curso gratis. Tu Maestro, una IA, .
El tercer paso del método tiene dos mitades: cuántos faltan y por qué. Esta página es la primera. En la anterior, data.info() ya te dejó una pista: duracion_min, estacion_destino y distancia_km tienen 303 valores cada una, así que a cada una le faltan exactamente 8. Antes de contar nada, apuesta.
Comprueba lo que sabes: Tres columnas tienen exactamente 8 vacíos cada una: duracion_min, estacion_destino y distancia_km. ¿Qué crees que está pasando?
Contar los vacíos
data.isna() devuelve una tabla del mismo tamaño que data, con True donde falta un valor y False donde no. Sumarla cuenta los True de cada columna, porque para Python True vale 1. Y como el promedio de muchos unos y ceros es la proporción de unos, isna().mean() te da la fracción de vacíos.
Corre la celda para contar los vacíos de cada columna. Después cámbiala por (data.isna().mean() 100).round(1) para verlos en porcentaje. Ya terminaste cuando sepas qué columna tiene la mayor proporción de vacíos y cuánto es.
Corre la celda para contar los vacíos de cada columna. Después cámbiala por (data.isna().mean() * 100).round(1) para verlos en porcentaje. Ya terminaste cuando sepas qué columna tiene la mayor proporción de vacíos y cuánto es.
Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Ejecuta tu código para ver su salida aquí.
Datos: viajes-rueda, 311 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||||
| 2 | ||||||||||
| 3 | ||||||||||
| 4 | ||||||||||
| 5 | ||||||||||
| 6 | ||||||||||
| 7 | ||||||||||
| 8 | ||||||||||
| 9 | ||||||||||
| 10 | ||||||||||
| 11 | ||||||||||
| 12 | ||||||||||
| 13 | ||||||||||
| 14 | ||||||||||
| 15 | ||||||||||
| 16 | ||||||||||
| 17 | ||||||||||
| 18 | ||||||||||
| 19 | ||||||||||
| 20 |
Seis columnas están completas. A tres les falta el 2.6% (8 de 311) y a anio_nacimiento el 23.5% (73 de 311), casi una de cada cuatro filas.
El porcentaje ayuda a dimensionar, pero no decide nada solo. Un 2.6% concentrado en el último día puede arruinar el reporte de ese día; un 23.5% repartido en un grupo puede borrar a ese grupo entero si eliminas las filas. Por eso la siguiente pregunta es dónde están, y la primera forma de averiguarlo es ver si varias columnas se vacían juntas.
Primero practica con una tabla chica. Escribe qué imprime cada línea y por qué.
Vacíos que van juntos
import pandas as pd
viajes = pd.DataFrame({
"duracion_min": [12.5, None, 30.0, None, 8.4],
"estacion_destino": ["Centro", None, "Estadio", None, "Mercado"],
"anio_nacimiento": [1990, 1985, None, None, 2001],
})
faltan_ambas = viajes["duracion_min"].isna() & viajes["estacion_destino"].isna()
print(viajes.isna().sum().sum())
print(faltan_ambas.sum())
print(viajes.isna().any(axis=1).sum())
Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.
Ahora en la tabla de Rueda. El código guarda dos máscaras, una por columna, y cuenta las filas donde se cumplen las dos.
Corre la celda. Después agrega una tercera máscara para distanciakm y cuenta las filas donde faltan las tres a la vez. Termina mostrando esas filas con data[faltanduracion]. Ya terminaste cuando veas las 8 filas y lo que tienen en común.
Corre la celda. Después agrega una tercera máscara para distancia_km y cuenta las filas donde faltan las tres a la vez. Termina mostrando esas filas con data[faltan_duracion]. Ya terminaste cuando veas las 8 filas y lo que tienen en común.
Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Ejecuta tu código para ver su salida aquí.
Datos: viajes-rueda, 311 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||||
| 2 | ||||||||||
| 3 | ||||||||||
| 4 | ||||||||||
| 5 | ||||||||||
| 6 | ||||||||||
| 7 | ||||||||||
| 8 | ||||||||||
| 9 | ||||||||||
| 10 | ||||||||||
| 11 | ||||||||||
| 12 | ||||||||||
| 13 | ||||||||||
| 14 | ||||||||||
| 15 | ||||||||||
| 16 | ||||||||||
| 17 | ||||||||||
| 18 | ||||||||||
| 19 | ||||||||||
| 20 |
Son los mismos 8 viajes: no tienen estación de destino, y por eso tampoco distancia (se calcula entre dos estaciones) ni duración (se mide hasta que la bici se ancla). Tres columnas vacías, una sola causa. Cuando varios vacíos van juntos, casi siempre hay un solo hecho detrás, y encontrarlo es más útil que tratar cada columna por separado. Mira la columna inicio de esas 8 filas: la siguiente página empieza ahí.
Vacíos que no parecen vacíos
isna() cuenta solo lo que pandas reconoce como vacío (su documentación aclara que una cadena vacía, '', tampoco cuenta). En las tablas de trabajo, un dato que falta aparece de muchas otras formas:
- texto que dice que falta:
"N/A","sin dato","-", una celda con un espacio; - un valor de relleno que el sistema pone cuando no hay dato:
0,9999,1900.
Rueda tiene uno de estos. En anio_nacimiento hay tres filas con 1900, que nadie con bici compartida podría tener; isna() no las cuenta. Las vas a ver en el módulo 3. Si el texto de relleno viene del archivo mismo, se puede avisar a pandas al leerlo; eso es parte del curso gratuito Tu CSV se ve raro.
Tu entrada de bitácora de esta página podría ser:
Observación: 8 viajes no tienen destino, distancia ni duración; a 73 les falta el año de nacimiento. Evidencia:
isna().sum()y el conteo combinado de las tres máscaras. Pregunta: ¿por qué esos 8 viajes no tienen destino? ¿Y por qué casi una de cada cuatro personas no tiene año?
Si en tu tabla los vacíos vienen escritos como texto, pregúntale a tu Maestro cómo encontrarlos.