¿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.
Tu turno
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.
Datos: viajes-rueda, 311 filas
| Fila | Quitar | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||||
| 2 | ||||||||||
| 3 | ||||||||||
| 4 | ||||||||||
| 5 | ||||||||||
| 6 | ||||||||||
| 7 | ||||||||||
| 8 | ||||||||||
| 9 | ||||||||||
| 10 | ||||||||||
| 11 | ||||||||||
| 12 | ||||||||||
| 13 | ||||||||||
| 14 | ||||||||||
| 15 | ||||||||||
| 16 | ||||||||||
| 17 | ||||||||||
| 18 | ||||||||||
| 19 | ||||||||||
| 20 |
Enter guarda; Esc deshace; vacía es un valor faltante
Tab agrega sangría; Esc y Tab para salir
Cinco 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 pdviajes = 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. Lo que escribas se queda en este navegador y te espera en tu curso.
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.
Tu turno
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.
Datos: viajes-rueda, 311 filas
| Fila | Quitar | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||||
| 2 | ||||||||||
| 3 | ||||||||||
| 4 | ||||||||||
| 5 | ||||||||||
| 6 | ||||||||||
| 7 | ||||||||||
| 8 | ||||||||||
| 9 | ||||||||||
| 10 | ||||||||||
| 11 | ||||||||||
| 12 | ||||||||||
| 13 | ||||||||||
| 14 | ||||||||||
| 15 | ||||||||||
| 16 | ||||||||||
| 17 | ||||||||||
| 18 | ||||||||||
| 19 | ||||||||||
| 20 |
Enter guarda; Esc deshace; vacía es un valor faltante
Tab agrega sangría; Esc y Tab para salir
Son los mismos 8 registros: no tienen estación de destino, distancia (se calcula entre dos estaciones) ni duración (se mide hasta el cierre). Los vacíos conjuntos sugieren buscar un proceso compartido; no demuestran una causa única. Busca el patrón y confirma la explicación antes de 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, un año que hace sospechar un valor de relleno y requiere confirmación; 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 registros 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 uno de cada cuatro registros no tiene año?
Si en tu tabla los vacíos vienen escritos como texto, pregúntale a tu Maestro cómo encontrarlos.
Inténtalo
Comprueba lo que sabes: En una tabla nueva, isna().sum() responde 0 para la columna telefono. ¿Puedes asegurar que no le falta ningún teléfono?