pandas

Pandas

Tutorial Pandas: Identificar y corregir errores y duplicados

Pandas: Aprende a identificar y corregir errores y duplicados en DataFrames. Domina técnicas para manejar valores NaN, tipos erróneos y datos duplicados en tus análisis de datos.

¿Qué son los valores erróneos en un DataFrame?

En el contexto de un DataFrame de Pandas, los valores erróneos hacen referencia a datos que no son válidos o que no se ajustan al formato esperado para una columna específica. Estos valores pueden surgir por diversas razones, como errores de entrada de datos, errores de medición, problemas de conversión de tipos, entre otros. Identificar y gestionar estos valores es crucial para mantener la integridad y calidad de los análisis de datos.

Algunos ejemplos comunes de valores erróneos incluyen:

  • Valores NaN (Not a Number): Representan datos faltantes en un DataFrame. Pandas utiliza NaN de NumPy para denotar valores ausentes en datos numéricos y None para datos no numéricos.
import pandas as pd
import numpy as np

data = {'A': [1, 2, np.nan, 4], 'B': [np.nan, 'foo', 'bar', 'baz']}
df = pd.DataFrame(data)
print(df)
  • Valores fuera de rango: Datos que no se encuentran dentro del rango esperado. Por ejemplo, una columna que representa edades no debería tener valores negativos o extremadamente altos.
data = {'Edad': [25, 30, -5, 200]}
df = pd.DataFrame(data)
print(df)
  • Valores con formato incorrecto: Por ejemplo, fechas que no siguen el formato esperado o cadenas de texto en una columna numérica.
data = {'Fecha': ['2024-01-01', '2024-02-30', '2024-03-15']}
df = pd.DataFrame(data)
print(df)
  • Errores de tipo de datos: Datos que no coinciden con el tipo esperado para una columna específica, como texto en una columna numérica.
data = {'Salario': [50000, 60000, 'no disponible', 70000]}
df = pd.DataFrame(data)
print(df)

La identificación y gestión de estos valores es un paso fundamental en la limpieza de datos. Pandas proporciona varias funciones para detectar y tratar valores erróneos:

  • Detección de valores NaN: Utilizando funciones como isna() y isnull().
print(df.isna())
print(df.isnull())
  • Detección de valores fuera de rango: Mediante operaciones lógicas y funciones como between().
print(df[df['Edad'] < 0])
print(df[df['Edad'] > 150])
  • Corrección de formatos de fecha: Utilizando to_datetime() para convertir cadenas a objetos de fecha.
df['Fecha'] = pd.to_datetime(df['Fecha'], errors='coerce')
print(df)
  • Conversión de tipos de datos: Utilizando astype() para convertir los datos a los tipos esperados.
df['Salario'] = pd.to_numeric(df['Salario'], errors='coerce')
print(df)

Estos métodos permiten identificar y manejar valores erróneos de manera eficiente, asegurando que los datos sean adecuados para análisis y modelos posteriores.

Formas de corregir valores erróneos en DataFrames

Para corregir valores erróneos en DataFrames de Pandas, se pueden utilizar diferentes técnicas y funciones que permiten limpiar y transformar los datos de manera eficiente. 

A continuación se describen algunas de las formas más comunes y efectivas para realizar estas correcciones:

  • Eliminación de valores erróneos: La eliminación de filas o columnas con valores erróneos es una de las técnicas más simples. Esto puede hacerse utilizando los métodos dropna() para eliminar filas o columnas con valores NaN, y drop() para eliminar valores específicos.
import pandas as pd
import numpy as np

data = {'A': [1, 2, np.nan, 4], 'B': [np.nan, 'foo', 'bar', 'baz']}
df = pd.DataFrame(data)

# Eliminar filas con valores NaN
df_cleaned = df.dropna()
print(df_cleaned)

# Eliminar columnas con valores NaN
df_cleaned = df.dropna(axis=1)
print(df_cleaned)
  • Imputación de valores faltantes: La imputación consiste en reemplazar los valores erróneos o faltantes con valores específicos, como la media, mediana, moda, o un valor constante. Utilizando el método fillna() se pueden realizar estas imputaciones.
data = {'A': [1, 2, np.nan, 4], 'B': [np.nan, 'foo', 'bar', 'baz']}
df = pd.DataFrame(data)

# Reemplazar NaN con la media de la columna
df['A'] = df['A'].fillna(df['A'].mean())
print(df)

# Reemplazar NaN con un valor constante
df['B'] = df['B'].fillna('desconocido')
print(df)
  • Corrección de valores fuera de rango: Para corregir valores fuera de rango, se pueden utilizar técnicas como la sustitución de valores que superan ciertos umbrales por valores límites o por valores más apropiados según el contexto.
data = {'Edad': [25, 30, -5, 200]}
df = pd.DataFrame(data)

# Reemplazar valores negativos y extremadamente altos
def adjust_age(x):
    if x < 0:
        return 0
    elif x > 100:
        return 100
    else:
        return x
    
df['Edad'] = df['Edad'].apply(adjust_age)
print(df)
  • Conversión de tipos de datos: La conversión de tipos de datos es crucial cuando los valores erróneos son causados por tipos incorrectos en una columna específica. Esto suele ocurrir cuando se mezclan tipos de datos (por ejemplo, cadenas de texto en una columna que debería ser numérica). Pandas ofrece varias formas de realizar estas conversiones de manera segura y eficiente:
    • astype(): Se utiliza para convertir una columna a un tipo de datos específico. Sin embargo, este método asume que todos los valores son convertibles, lo que puede generar errores si hay datos no válidos.
    • pd.to_numeric(): Este método es más flexible y permite manejar valores no convertibles de manera controlada. Al usar el parámetro errors='coerce', los valores que no se pueden convertir se reemplazarán por NaN en lugar de provocar un error, lo que facilita la limpieza de datos sin interrupciones.
data = {'Salario': [50000, 60000, '70000', 80000]}
df = pd.DataFrame(data)

# Convertir la columna 'Salario' a tipo float usando astype()
df['Salario'] = df['Salario'].astype(float)
print(df)
data = {'Salario': [50000, 60000, 'no disponible', 70000]}
df = pd.DataFrame(data)

# Convertir la columna 'Salario' a numérica, forzando errores a NaN
df['Salario'] = pd.to_numeric(df['Salario'], errors='coerce')
print(df)
  • Corrección de formatos de fecha: Cuando los valores erróneos son causados por formatos de fecha incorrectos, el método to_datetime() puede ser utilizado para convertir cadenas de texto a objetos de fecha, gestionando errores de conversión.
data = {'Fecha': ['2024-01-01', '2024-02-30', '2024-03-15']}
df = pd.DataFrame(data)

# Convertir la columna 'Fecha' a tipo datetime, forzando errores a NaT
df['Fecha'] = pd.to_datetime(df['Fecha'], errors='coerce')
print(df)
  • Uso de expresiones regulares para limpieza de texto: Las expresiones regulares permiten identificar y corregir patrones erróneos en columnas de texto. Utilizando el método str.replace() se pueden aplicar estas correcciones.
data = {'Correo': ['user@domain.com', 'user2@domain', 'user3@domain.com']}
df = pd.DataFrame(data)

# Corregir correos electrónicos incorrectos
df['Correo'] = df['Correo'].str.replace(r'@domain$', '@domain.com', regex=True)
print(df)

Estas técnicas permiten corregir diversos tipos de errores en los datos, mejorando la calidad y la integridad del DataFrame antes de su análisis.

¿Qué son y cómo corregir valores duplicados en DataFrames?

En Pandas, los valores duplicados pueden surgir cuando se combinan múltiples fuentes de datos, se realizan operaciones de concatenación o simplemente se introducen errores en los datos. La presencia de duplicados puede distorsionar los análisis y afectar la calidad de los resultados. Es esencial identificar y gestionar estos duplicados para asegurar la integridad de los datos.

Para identificar valores duplicados en un DataFrame, Pandas proporciona el método duplicated(), que devuelve un booleano indicando si una fila es un duplicado o no.

import pandas as pd

data = {'Nombre': ['Alice', 'Bob', 'Alice', 'Charlie'],
        'Edad': [25, 30, 25, 35]}
df = pd.DataFrame(data)

# Identificar filas duplicadas
duplicados = df.duplicated()
print(duplicados)

El método duplicated() tiene varios parámetros útiles:

  • subset: Especifica las columnas que se deben considerar para identificar duplicados. Si se omite, se consideran todas las columnas.
  • keep: Determina cuál de los duplicados se marcará como False. Puede ser 'first' (predeterminado), 'last' o False para marcar todos los duplicados como True.
# Identificar duplicados considerando solo la columna 'Nombre'
duplicados_nombre = df.duplicated(subset=['Nombre'])
print(duplicados_nombre)

# Identificar duplicados y marcar todos como True
duplicados_todos = df.duplicated(keep=False)
print(duplicados_todos)

Para eliminar valores duplicados, se utiliza el método drop_duplicates(), que elimina las filas duplicadas del DataFrame.

# Eliminar filas duplicadas, manteniendo la primera ocurrencia
df_sin_duplicados = df.drop_duplicates()
print(df_sin_duplicados)

# Eliminar duplicados considerando solo la columna 'Nombre'
df_sin_duplicados_nombre = df.drop_duplicates(subset=['Nombre'])
print(df_sin_duplicados_nombre)

# Eliminar todas las filas duplicadas
df_sin_duplicados_todos = df.drop_duplicates(keep=False)
print(df_sin_duplicados_todos)

En algunos casos, es posible que desees eliminar duplicados basándote en una combinación de columnas. Esto se puede lograr especificando varias columnas en el parámetro subset.

data = {'Nombre': ['Alice', 'Bob', 'Alice', 'Charlie', 'Alice'],
        'Edad': [25, 30, 25, 35, 25],
        'Ciudad': ['Madrid', 'Barcelona', 'Madrid', 'Valencia', 'Madrid']}
df = pd.DataFrame(data)

# Identificar duplicados basados en 'Nombre' y 'Edad'
duplicados_combinados = df.duplicated(subset=['Nombre', 'Edad'])
print(duplicados_combinados)

# Eliminar duplicados basados en 'Nombre' y 'Edad'
df_sin_duplicados_combinados = df.drop_duplicates(subset=['Nombre', 'Edad'])
print(df_sin_duplicados_combinados)

Finalmente, en situaciones donde los duplicados no deben ser eliminados, sino corregidos o marcados, se pueden realizar transformaciones adicionales utilizando métodos como groupby() y apply() para consolidar la información.

# Agrupar por 'Nombre' y consolidar edades tomando la media
df_agrupado = df.groupby('Nombre').agg({'Edad': 'mean', 'Ciudad': 'first'}).reset_index()
print(df_agrupado)

Estas herramientas y métodos permiten gestionar y corregir valores duplicados en DataFrames de Pandas de manera eficiente, asegurando que los datos sean adecuados para análisis posteriores.

Certifícate en Pandas con CertiDevs PLUS

Ejercicios de esta lección Identificar y corregir errores y duplicados

Evalúa tus conocimientos de esta lección Identificar y corregir errores y duplicados con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Pandas

Accede a todas las lecciones de Pandas y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Certificados de superación de Pandas

Supera todos los ejercicios de programación del curso de Pandas y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Identificar y gestionar valores NaN en DataFrames.

  • Detectar y corregir valores fuera de rango.

  • Corregir y convertir formatos incorrectos de datos.

  • Manejar y transformar datos de tipos erróneos.

  • Identificar y eliminar valores duplicados.

  • Aplicar técnicas de imputación para valores faltantes.

  • Utilizar expresiones regulares para limpiar datos de texto.

  • Consolidar información mediante agrupaciones y agregaciones.