¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Encontrar y corregir valores erróneos

Después de esta lección: Puedo encontrar y corregir valores ausentes y erróneos en un conjunto de datos.

Lección de 55 min2 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Una exportación con agujeros

El programa de reservas de la empresa exporta un año de días para que lo estudies. Algunas temperaturas están en blanco. Un día marca 99,9 grados. Un recuento de alquileres dice «unknown».

Un modelo que aprende de este archivo aprende también de sus fallos. Limpiar va primero, y suele ser la mayor parte del trabajo.

Al final de esta lección

Nota

Puedo encontrar y corregir valores ausentes y erróneos en un conjunto de datos.

Palabras clave

PalabraQué significaEjemplo
Valor ausenteuna celda que no tiene nadaNaN
Tipo de datola clase de valor que guarda una columnafloat64
Duplicadouna fila que repite otra exactamente
Valor atípicoun valor muy lejos del resto
Imputarrellenar un valor ausente con una estimación razonable

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cuatro fallos que buscar

Casi todos los datos malos tienen uno de cuatro fallos. Falta un valor. Una columna tiene el tipo de dato equivocado, y los números se guardan como texto. Una fila está duplicada. O un valor no puede ser cierto.

Cada fallo tiene una prueba rápida en pandas. Mira antes de cambiar nada.

Ejemplo resuelto: cada fallo y su prueba

FalloCómo se veLa prueba
Valor ausenteNaN en una celdamessy.isna().sum()
Tipo de dato equivocadoobject donde esperas númerosmessy.dtypes
Duplicadomás filas que díasmessy.duplicated().sum()
Valor imposibleun máximo que no puede darsemessy["temp_c"].max()
Palabras que no coincidenSunny y sunny contadas apartemessy["weather"].value_counts()

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Crea la copia sucia y revísala

Comando
docker exec jupyter python3 steps/messy.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe esto en tu cuaderno: las repeticiones

Código: python
import pandas as pd

messy = pd.read_csv("messy.csv")
# keep=False marca las dos copias de cada fila repetida.
messy[messy.duplicated(keep=False)]

Escribe esto en tu cuaderno: un valor imposible

Código: python
# Un valor imposible: más de 45 grados.
messy[messy["temp_c"] > 45]

Una columna de texto esconde números

Basta una palabra en una columna de números para que pandas guarde toda la columna como texto. Su tipo pasa a object, y una media ya no funciona.

pd.to_numeric(columna, errors="coerce") convierte en número todo lo que puede. Lo que no puede leer pasa a NaN, y así lo encuentras.

Las palabras tienen la misma trampa. Para un ordenador, «Sunny » con un espacio y «SUNNY» son valores distintos.

Ordenar palabras y comprobar recuentos

Código: python
# Tres maneras de escribir el mismo tiempo.
words = ["rainy", " Rainy", "RAINY "]
for word in words:
    print(repr(word), "pasa a", repr(word.strip().lower()))

# ¿Es un recuento de alquileres un número entero?
for text in ["290", "-12", "n/a"]:
    print(text, text.isdigit())
# Añade "4.5" a la segunda lista. ¿Qué dice isdigit?

Escribe esto en tu cuaderno: las palabras

Código: python
# Quita los espacios y pasa a minúsculas antes de contar.
messy["weather"].str.strip().str.lower().value_counts()

Un error muy común

Advertencia

Mucha gente cree que todo valor atípico es un error que hay que borrar. Un valor raro puede ser cierto: el día con más alquileres, 487, es un domingo de sol de junio. Quita o sustituye un valor solo cuando no puede ser cierto, como 99,9 grados o un recuento negativo.

Borrar, corregir o imputar, y anotarlo

Para cada fallo, elige una de tres cosas. Borra la fila cuando no tiene arreglo, como un recuento «unknown». Corrige el valor cuando el bueno está claro, como «Sunny » a «sunny». Imputa el valor cuando basta una estimación, como la mediana de las temperaturas.

No toques el archivo original y limpia una copia. Así cada paso se puede revisar y repetir.

Ejemplo resuelto: los pasos en orden

PasoFilas que quedanPor qué
Leer messy.csv367La exportación tal como llegó
drop_duplicates365Dos filas eran repeticiones
Dejar recuentos de 0 o más363«unknown» y -5 no son recuentos
Marcar como ausente lo que pase de 45 grados363El 99,9 se une a los ausentes
Rellenar con la mediana363Aquí una estimación es mejor que un hueco

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Ejecuta los pasos de limpieza

Comando
docker exec jupyter python3 steps/clean.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: deja una marca

Quien lea tus datos limpios querrá saber qué cifras son reales y cuáles son estimaciones. En tu cuaderno, repite los pasos de clean.py sobre messy.csv.

Justo antes de rellenar, crea una columna nueva: clean["temp_filled"] = clean["temp_c"].isna(). Después rellena. ¿Cuántas filas quedan marcadas con True? ¿Por qué es útil esa columna para un modelo o para un informe?

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.