Técnicas de Limpieza de Datos con Pandas
import pandas as pd
import numpy as np
datos = pd.DataFrame({"identificador":[1001,1002,1003,1004,1005,1006],
"fecha":pd.date_range('20130102', periods=6),
"ciudad":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
"edad":[23,44,54,32,34,32],
"categoria":['100-A','100-B','110-A','110-C','210-A','130-F'],
"valor":[1200,np.nan,2133,5433,np.nan,4432]},
columns =['identificador','fecha','ciudad','categoria','edad','valor'])
datos
| identificador | fecha | ciudad | categoria | edad | valor | |
|---|---|---|---|---|---|---|
| 0 | 1001 | 2013-01-02 | Beijing | 100-A | 23 | 1200.0 |
| 1 | 1002 | 2013-01-03 | SH | 100-B | 44 | NaN |
| 2 | 1003 | 2013-01-04 | guangzhou | 110-A | 54 | 2133.0 |
| 3 | 1004 | 2013-01-05 | Shenzhen | 110-C | 32 | 5433.0 |
| 4 | 1005 | 2013-01-06 | shanghai | 210-A | 34 | NaN |
| 5 | 1006 | 2013-01-07 | BEIJING | 130-F | 32 | 4432.0 |
- Reemplazando valores faltantes con cero
datos['valor'].fillna(0,inplace=True)
El parámetro inplace=True indica que la modificación se realizará directamente en el DataFrame original. Por defecto es False, lo que significa que no se modifica el dato original sino que se devuelve un nuevo objeto.
datos['valor'].fillna(0)
0 1200.0 1 0.0 2 2133.0 3 5433.0 4 0.0 5 4432.0 Name: valor, dtype: float64
- Usando la media para imputar valores faltantes
datos['valor'].fillna(datos['valor'].mean(),inplace=True)
datos['valor'].fillna(datos['valor'].mean())
0 1200.0 1 3299.5 2 2133.0 3 5433.0 4 3299.5 5 4432.0 Name: valor, dtype: float64
- Eliminando espacios en blanco en la columna ciudad
datos['ciudad'] = datos['ciudad'].map(str.strip)
La función map() permite aplicar una operación a cada elemento del DataFrame. str.strip elimina los espacios en blanco al principio y al final de la cadena.
datos['ciudad'] = datos['ciudad'].map(str.strip)
datos['ciudad']
0 Biejing 1 SH 2 guangzhou 3 Shenzhen 4 shanghai 5 BEIJING Name: ciudad, dtype: object
- Conversión de mayúsculas y minúsculas
datos['ciudad'] = datos['ciudad'].map(str.lower) # Convertir a minúsculas
datos['ciudad'] = datos['ciudad'].str.lower() # Convertir a minúsculas
datos['ciudad'] = datos['ciudad'].map(str.upper) # Convertir a mayúsculas
datos['ciudad'] = datos['ciudad'].str.upper() # Convertir a mayúsculas
datos['ciudad'] = datos['ciudad'].str.upper()
datos['ciudad']
0 BEIJING 1 SH 2 GUANGZHOU 3 SHENZHEN 4 SHANGHAI 5 BEIJING Name: ciudad, dtype: object
datos['ciudad'] = datos['ciudad'].map(str.lower)
datos['ciudad']
0 beijing 1 sh 2 guangzhou 3 shenzhen 4 shanghai 5 beijing Name: ciudad, dtype: object
- Modificación de tipos de datos
datos['valor'] = datos['valor'].astype('int') # Convertir a entero
datos['valor'] = datos['valor'].astype('float') # Convertir a flotante
- Cambio de nombres de columnas
datos.rename(columns={'nombre_antiguo':'nombre_nuevo'}, inplace=True)
inplace=True indica que la modificación se realizará directamente en el DataFrame original. Por defecto es False, lo que significa que no se modifica el dato original sino que se devuelve un nuevo objeto.
datos.rename(columns = {"categoria" : "categoria-tamano"})
| identificador | fecha | ciudad | categoria-tamano | edad | valor | |
|---|---|---|---|---|---|---|
| 0 | 1001 | 2013-01-02 | beijing | 100-A | 23 | 1200.0 |
| 1 | 1002 | 2013-01-03 | sh | 100-B | 44 | NaN |
| 2 | 1003 | 2013-01-04 | guangzhou | 110-A | 54 | 2133.0 |
| 3 | 1004 | 2013-01-05 | shenzhen | 110-C | 32 | 5433.0 |
| 4 | 1005 | 2013-01-06 | shanghai | 210-A | 34 | NaN |
| 5 | 1006 | 2013-01-07 | beijing | 130-F | 32 | 4432.0 |
- Eliminando duplicados manteniendo el primer registro
datos.drop_duplicates(inplace=True, keep='first')
El parámetro keep especifica qué registro duplicado mantener: 'first' mantiene el primero, 'last' mantiene el último, False elimina todos los registros duplicados. Por defecto es 'first'.
datos['ciudad'].drop_duplicates()
0 beijing 1 sh 2 guangzhou 3 shenzhen 4 shanghai Name: ciudad, dtype: object
- Sustitución de valores
datos['ciudad'].replace('Nueva York', 'NYC', inplace=True)
datos['ciudad'].replace('sh', 'shanghai')
0 beijing 1 shanghai 2 guangzhou 3 shenzhen 4 shanghai 5 beijing Name: ciudad, dtype: object