Limpieza Básica de Datos con Pandas

PandasBeginner
Practicar Ahora

Introducción

Bienvenido al laboratorio de Limpieza Básica de Datos con Pandas. La limpieza de datos es un primer paso crucial en cualquier proyecto de análisis de datos o aprendizaje automático. Los datos del mundo real a menudo están desordenados, contienen valores faltantes, entradas duplicadas o tipos de datos incorrectos. El uso de datos crudos y sin limpiar puede llevar a análisis inexactos y conclusiones poco fiables.

Pandas es una potente biblioteca de Python que proporciona estructuras de datos y herramientas de análisis de datos de alto rendimiento y fáciles de usar. Es la herramienta de referencia para la limpieza y manipulación de datos en Python.

En este laboratorio, aprenderá las técnicas fundamentales para limpiar un conjunto de datos utilizando Pandas. Practicará:

  • Eliminar filas con valores faltantes usando dropna().
  • Rellenar valores faltantes con fillna().
  • Eliminar filas duplicadas con drop_duplicates().
  • Renombrar columnas con rename().
  • Convertir tipos de datos de columnas con astype().

Al final de este laboratorio, tendrá una comprensión sólida del flujo de trabajo básico de limpieza de datos en Pandas.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 88%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Eliminar filas con el método dropna

En este paso, aprenderá cómo manejar datos faltantes eliminando las filas que contienen valores nulos. En Pandas, los datos faltantes se representan como NaN (Not a Number). Una de las estrategias más sencillas para tratar los valores NaN es eliminar las filas o columnas que los contienen.

El método dropna() le permite hacer esto fácilmente. Por defecto, elimina cualquier fila que contenga al menos un valor NaN.

Primero, ejecutemos el script inicial para ver nuestro DataFrame de partida. El script de configuración ya ha creado un archivo llamado main.py en el directorio ~/project.

Abra una terminal en el WebIDE y ejecute el siguiente comando:

python3 main.py

Debería ver el DataFrame original, que contiene valores NaN en las columnas age y city.

Original DataFrame:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
4    Alice  25.0     New York         50000
5      Eva   NaN       Boston         90000
6    Frank  45.0          NaN        100000

Original DataFrame Info:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 4 columns):
 ##   Column         Non-Null Count  Dtype
---  ------         --------------  -----
 0   name           7 non-null      object
 1   age            6 non-null      float64
 2   city           6 non-null      object
 3   SALARY_IN_USD  7 non-null      object
dtypes: float64(1), object(3)
memory usage: 352.0+ bytes

Ahora, usemos dropna() para ver cómo funciona. Abra el archivo main.py desde el explorador de archivos en el panel izquierdo. Agregue el siguiente código al final del archivo. Este código creará un nuevo DataFrame df_dropped con las filas que contienen NaN eliminadas y lo imprimirá. Todavía no estamos modificando el df original, por lo que podemos explorar otros métodos en los siguientes pasos.

## Add this to the end of main.py

print("\nDataFrame after dropping rows with any missing values:")
df_dropped = df.dropna()
print(df_dropped)

Guarde el archivo (Ctrl+S o Cmd+S) y ejecútelo de nuevo desde la terminal:

python3 main.py

La salida ahora incluirá una nueva sección que muestra el DataFrame después de que se hayan eliminado las filas con valores NaN (filas de Eva y Frank).

## ... (previous output) ...

DataFrame after dropping rows with any missing values:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
4    Alice  25.0     New York         50000

Rellenar valores faltantes usando fillna

En este paso, aprenderá otra forma de manejar datos faltantes: rellenar los valores faltantes con un valor específico utilizando el método fillna(). Eliminar filas con datos faltantes a veces puede provocar una pérdida significativa de datos, especialmente si muchas filas tienen valores faltantes. Rellenarlos suele ser una mejor alternativa.

Puede rellenar los valores NaN con una constante, como 0 o "Unknown", o con un valor calculado, como la media o la mediana de la columna.

Modifiquemos nuestro archivo main.py. En lugar de simplemente imprimir el DataFrame resultante de dropna(), ahora limpiaremos nuestro DataFrame principal df rellenando los valores faltantes. Rellenaremos la edad faltante (age) con la media de las edades existentes y la ciudad faltante (city) con la cadena 'Unknown'.

Elimine el código de dropna() que agregó en el último paso y reemplácelo con el siguiente código. Usamos inplace=True para modificar el DataFrame directamente.

## Replace the dropna() code with this at the end of main.py

## Calculate the mean of the 'age' column
mean_age = df['age'].mean()

## Fill missing values using the recommended approach to avoid FutureWarnings
df.fillna({'age': mean_age, 'city': 'Unknown'}, inplace=True)

print("\nDataFrame after filling missing values:")
print(df)

El argumento inplace=True modifica el DataFrame en su lugar, lo que significa que no necesita asignar el resultado de vuelta a una variable (por ejemplo, df = df.fillna(...)).

Guarde el archivo y ejecútelo desde la terminal:

python3 main.py

Verá que los valores NaN han sido reemplazados. La edad de Eva ahora es la media de las otras edades, y la ciudad de Frank es 'Unknown'.

## ... (original DataFrame output) ...

DataFrame after filling missing values:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
4    Alice  25.0     New York         50000
5      Eva  33.3       Boston         90000
6    Frank  45.0      Unknown        100000

Nota: La edad media es (25+30+35+40+25+45)/6 = 33.33.... Pandas rellenará los NaN con este valor. La salida anterior muestra 35.0 por simplicidad; su salida real para la edad de Eva será la media calculada.

Eliminar filas duplicadas con drop_duplicates

En este paso, aprenderá cómo eliminar filas duplicadas de su DataFrame. Los datos duplicados pueden sesgar el análisis y llevar a resultados incorrectos. El método drop_duplicates() ayuda a identificarlos y eliminarlos.

En nuestro conjunto de datos original, la fila de 'Alice' aparece dos veces con exactamente la misma información. Ahora que hemos manejado los valores faltantes, nuestra próxima tarea de limpieza es eliminar esta entrada duplicada.

Por defecto, drop_duplicates() considera una fila como duplicada si todos los valores de sus columnas son idénticos a los de otra fila.

Agregue el siguiente código al final de su script main.py. Continuaremos usando inplace=True para modificar nuestro DataFrame.

## Add this to the end of main.py

df.drop_duplicates(inplace=True)

print("\nDataFrame after dropping duplicates:")
print(df)

Guarde el archivo y ejecútelo desde la terminal:

python3 main.py

La salida ahora mostrará un DataFrame con solo 6 filas, ya que se ha eliminado una de las filas de 'Alice'.

## ... (previous output) ...

DataFrame after dropping duplicates:
      name   age         city SALARY_IN_USD
0    Alice  25.0     New York         50000
1      Bob  30.0  Los Angeles         60000
2  Charlie  35.0     New York         70000
3    David  40.0      Chicago         80000
5      Eva  33.3       Boston         90000
6    Frank  45.0      Unknown        100000

Observe que el índice 4 ahora falta, lo que corresponde a la fila duplicada que se eliminó. El DataFrame ahora tiene 6 filas únicas.

Renombrar columnas usando el método rename

En este paso, aprenderá cómo renombrar columnas. Los nombres de columna consistentes y claros son esenciales para la legibilidad y mantenibilidad del código. Es una práctica común usar una convención de nombres consistente, como todo en minúsculas con guiones bajos.

Nuestro DataFrame tiene una columna llamada SALARY_IN_USD. Renombrémosla a un nombre más simple y en minúsculas: salary. El método rename() es perfecto para esto. Pasa un diccionario al argumento columns donde las claves son los nombres antiguos y los valores son los nombres nuevos.

Agregue el siguiente código al final de su script main.py:

## Add this to the end of main.py

df.rename(columns={'SALARY_IN_USD': 'salary'}, inplace=True)

print("\nDataFrame after renaming columns:")
print(df)

Guarde el archivo y ejecútelo desde la terminal:

python3 main.py

Verá que la columna SALARY_IN_USD ha sido renombrada exitosamente a salary.

## ... (previous output) ...

DataFrame after renaming columns:
      name   age         city   salary
0    Alice  25.0     New York    50000
1      Bob  30.0  Los Angeles    60000
2  Charlie  35.0     New York    70000
3    David  40.0      Chicago    80000
5      Eva  33.3       Boston    90000
6    Frank  45.0      Unknown   100000

Este simple cambio hace que el nombre de la columna sea más fácil de escribir y sigue una guía de estilo común de Python.

Convertir tipos de columna con astype

En este paso final, aprenderá cómo convertir el tipo de dato de una columna. Los tipos de datos correctos son cruciales para realizar cálculos y para la eficiencia de la memoria.

Si observa la salida inicial de df.info(), notará que la columna SALARY_IN_USD tenía un Dtype de object, lo que significa que estaba almacenando los números como cadenas de texto. No podemos realizar operaciones matemáticas (como calcular el salario promedio) sobre cadenas de texto. Necesitamos convertir esta columna a un tipo numérico, como int (entero).

El método astype() se utiliza para este propósito. Convirtamos nuestra nueva columna salary al tipo int.

Agregue el siguiente código al final de main.py. También imprimiremos la información del DataFrame nuevamente para confirmar el cambio.

## Add this to the end of main.py

df['salary'] = df['salary'].astype(int)

print("\nDataFrame after converting data types:")
print(df)

print("\nFinal DataFrame Info:")
df.info()

Guarde el archivo y ejecútelo por última vez:

python3 main.py

La salida final mostrará el DataFrame limpio y su nueva información. Observe detenidamente el Dtype de la columna salary en la salida de info. Ahora debería ser int64, no object.

## ... (previous output) ...

DataFrame after converting data types:
      name   age         city  salary
0    Alice  25.0     New York   50000
1      Bob  30.0  Los Angeles   60000
2  Charlie  35.0     New York   70000
3    David  40.0      Chicago   80000
5      Eva  33.3       Boston   90000
6    Frank  45.0      Unknown  100000

Final DataFrame Info:
<class 'pandas.core.frame.DataFrame'>
Index: 6 entries, 0 to 6
Data columns (total 4 columns):
 ##   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   name    6 non-null      object
 1   age     6 non-null      float64
 2   city    6 non-null      object
 3   salary  6 non-null      int64
dtypes: float64(1), int64(1), object(2)
memory usage: 240.0+ bytes

Con la columna salary como tipo entero, ahora puede realizar cálculos como df['salary'].mean().

Resumen

¡Felicitaciones por completar el laboratorio de Limpieza Básica de Datos con Pandas! Ha transformado con éxito un conjunto de datos desordenado y crudo en un formato limpio y listo para el análisis.

En este laboratorio, ha aprendido y practicado varias técnicas esenciales de limpieza de datos en Pandas:

  • Manejo de valores faltantes: Vio cómo eliminar filas con NaN usando dropna() y cómo rellenarlas con datos significativos usando fillna().
  • Eliminación de duplicados: Utilizó drop_duplicates() para eliminar filas redundantes de su conjunto de datos.
  • Renombrado de columnas: Aprendió a hacer que los nombres de las columnas sean más consistentes y legibles con el método rename().
  • Conversión de tipos de datos: Utilizó astype() para cambiar el tipo de dato de una columna al formato correcto, permitiendo un análisis posterior.

Estas habilidades fundamentales son los pilares de cualquier trabajo serio con datos. Dominarlas le permitirá abordar con confianza los desafíos de datos del mundo real. Siga practicando estas técnicas para volverse competente en la manipulación de datos con Pandas.