Introducción a la limpieza de datos
La limpieza de datos es una etapa crucial en el proceso de análisis de datos. Utilizando Python y la biblioteca Pandas, los analistas pueden transformar datos sucios en información utilizables. Esta limpieza incluye la detección y eliminación de valores nulos, duplicados y datos inconsistentes.
Uso de Pandas para la limpieza
Pandas es una herramienta poderosa que simplifica la manipulación de datos. Con funciones como dropna() para eliminar valores nulos y drop_duplicates() para remover registros duplicados, se hace más fácil mantener la integridad de los datos. Además, se pueden aplicar filtros y condiciones para limpiar datasets grandes de manera eficiente.
Creación de gráficos para visualizar la limpieza
Una vez que se ha realizado la limpieza de datos, es útil crear imágenes que representen esos datos. Bibliotecas como Matplotlib o Seaborn se integran fácilmente con Pandas, permitiendo la visualización de patrones y tendencias post-limpieza. Esto no solo proporciona una mejor comprensión de los datos, sino que también ayuda a identificar áreas que requieren atención adicional.
Tratamiento de Valores Nulos mediante Imputación
¡Bienvenidos de nuevo al blog! En el tutorial anterior aprendimos a lidiar con los registros duplicados. Hoy nos enfrentaremos a otro de los dolores de cabeza más comunes de cualquier Data Scientist o Analista de Datos: los valores nulos o faltantes (NaN o None).
Cuando tu conjunto de datos tiene celdas vacías, eliminar las filas completas no siempre es la mejor opción, ya que perderías información valiosa de las otras columnas. Una técnica estándar y muy eficiente es la imputación, que consiste en rellenar esos huecos con un valor estadístico estimado, como el promedio. ¡Vamos a resolver el ejercicio de hoy paso a paso!
El Planteamiento del Problema
Imagina que estás procesando la tabla de ventas del día, pero debido a un problema intermitente en el sistema de captura, la columna 'Precio' no se registró en algunos productos.
Cuentas con el siguiente diccionario inicial en Python:
data = {
'ID': [1, 2, 3, 4],
'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D'],
'Cantidad': [10, 20, 30, 40],
'Precio': [100, None, 300, None]
}
El Reto
Escribe un script en Python usando la librería Pandas para identificar los valores nulos en la columna 'Precio' y reemplazarlos (rellenarlos) por el promedio de los precios válidos (no nulos) de esa misma columna.
La Solución Paso a Paso
Para solucionar este reto como un profesional, dividiremos nuestra estrategia en tres fases limpias dentro de nuestro código.
Paso 1: Crear el DataFrame de trabajo
Importamos Pandas y convertimos nuestros datos estructurados en un objeto tabular (DataFrame).
import pandas as pd
# Diccionario inicial
data = {
'ID': [1, 2, 3, 4],
'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D'],
'Cantidad': [10, 20, 30, 40],
'Precio': [100, None, 300, None]
}
# Creamos el DataFrame
df = pd.DataFrame(data)
Paso 2: Calcular el Promedio de forma inteligente
Necesitamos calcular la media aritmética de la columna. Lo maravilloso de Pandas es que su método .mean() es inteligente por defecto: ignora automáticamente los valores nulos (None o NaN) al hacer el cálculo.
La fórmula matemática que aplicará Pandas de forma interna es:
Reemplazando con nuestros datos reales:
En código, simplemente aislamos la columna y extraemos su media:
promedio_precio = df['Precio'].mean()
Paso 3: Rellenar los vacíos con .fillna()
Una vez que guardamos el valor de 200 en nuestra variable, utilizamos el método .fillna(). Este método busca todos los campos nulos de la serie seleccionada y los reemplaza con el valor que le pases como argumento.
Para guardar los cambios de forma permanente en nuestro DataFrame, reasignamos el resultado a la misma columna:
df['Precio'] = df['Precio'].fillna(promedio_precio)
Código Completo y Listo para Ejecutar
Aquí tienes el script definitivo unificado. Puedes copiarlo y probarlo directamente en tu entorno local o Jupyter Notebook:
import pandas as pd
# 1. Datos del ejercicio
data = {
'ID': [1, 2, 3, 4],
'Producto': ['Producto A', 'Producto B', 'Producto C', 'Producto D'],
'Cantidad': [10, 20, 30, 40],
'Precio': [100, None, 300, None]
}
# 2. Inicializar el DataFrame
df = pd.DataFrame(data)
# 3. Calcular el promedio de los precios existentes
promedio_precio = df['Precio'].mean()
# 4. Reemplazar los valores nulos por el promedio calculado
df['Precio'] = df['Precio'].fillna(promedio_precio)
# 5. Mostrar el resultado final en la consola
print("--- Tabla de Ventas con Valores Imputados ---")
print(df)
Análisis del Resultado
Al ejecutar el programa, tu terminal imprimirá la siguiente estructura perfectamente limpia:
--- Tabla de Ventas con Valores Imputados --- ID Producto Cantidad Precio 0 1 Producto A 10 100.0 1 2 Producto B 20 200.0 2 3 Producto C 30 300.0 3 4 Producto D 40 200.0
Notas Técnicas para el Lector
- Conversión a decimales (
float64): Habrás notado que los precios originales eran enteros (100 y 300), pero el resultado final muestra decimales (100.0, 200.0). Esto ocurre porque en Pandas, la presencia de valores nulos o la operación de promedio fuerza a la columna a adoptar el tipo de dato flotante para mantener la precisión matemática. - Buenas Prácticas: En versiones antiguas de Pandas era común ver la sintaxis
df['Precio'].fillna(promedio, inplace=True). Sin embargo, la comunidad actual desaconseja el uso deinplace=Truedebido a problemas de rendimiento y legibilidad. La reasignación directa (df['columna'] = df['columna'].fillna(...)) es la forma estándar de la industria hoy en día.