
Manipulación de Datos con Pandas: Guía Completa para Ciencia de Datos
Aprende a manipular datos en Pandas. Guía paso a paso para principiantes en ciencia de datos con ejemplos prácticos en Python.
¡Da tus primeros pasos en la manipulación de datos con Pandas! En este tutorial completo te guiaré paso a paso para que aprendas a seleccionar, ordenar, agrupar y transformar datos en Pandas, preparándolos para análisis avanzados.
Objetivo: Aprender a usar las funciones de Pandas para manipular datos, incluyendo selección, ordenamiento, agregación y transformación.
Paso 1: Instalación e Importación
Instala pandas si aún no lo tienes. Abre tu terminal o prompt de comandos y escribe:
pip install pandas numpy
Una vez instalado, puedes importarlo en tu código Python:
import pandas as pd
import numpy as np
Paso 2: Crear un DataFrame de Ejemplo
Para practicar, crearemos un DataFrame de ejemplo:
data = {
'Nombre': ['Ana', 'Luis', 'Carmen', 'Pedro', 'Sofía', 'Jorge'],
'Edad': [25, 32, 28, 45, 23, 31],
'Ciudad': ['Madrid', 'Barcelona', 'Madrid', 'Valencia', 'Barcelona', 'Sevilla'],
'Salario': [35000, 42000, 38000, 55000, 31000, 48000],
'Departamento': ['Ventas', 'TI', 'Ventas', 'RH', 'TI', 'Ventas']
}
df = pd.DataFrame(data)
print("DataFrame original:")
print(df)
Paso 3: Selección de Datos
Seleccionar Columnas
# Una columna (devuelve Series)
nombres = df['Nombre']
# Múltiples columnas (devuelve DataFrame)
sub_df = df[['Nombre', 'Edad', 'Salario']]
Seleccionar Filas
# Por índice
fila_2 = df.iloc[2] # Tercera fila (índice 2)
# Por rango
primeras_3 = df.iloc[0:3] # Primeras tres filas
# Por condición
madrid = df[df['Ciudad'] == 'Madrid']
salarios_altos = df[df['Salario'] > 40000]
Paso 4: Ordenamiento de Datos
# Ordenar por una columna
df_ordenado = df.sort_values('Salario') # Ascendente
df_ordenado_desc = df.sort_values('Salario', ascending=False) # Descendente
# Ordenar por múltiples columnas
df_ordenado_multi = df.sort_values(['Departamento', 'Salario'], ascending=[True, False])
Paso 5: Agregación de Datos
GroupBy
# Agrupar por departamento y calcular promedios
grupo_depto = df.groupby('Departamento')['Salario'].mean()
print("\nSalario promedio por departamento:")
print(grupo_depto)
# Múltiples operaciones de agregación
resumen = df.groupby('Departamento').agg({
'Salario': ['mean', 'min', 'max', 'count'],
'Edad': 'mean'
})
print("\nResumen por departamento:")
print(resumen)
Tablas Pivote
# Crear una tabla pivote
pivot = pd.pivot_table(df,
values='Salario',
index='Departamento',
columns='Ciudad',
aggfunc='mean',
fill_value=0)
print("\nTabla pivote: Salario promedio por Depto y Ciudad")
print(pivot)
Paso 6: Transformación de Datos
Crear Nuevas Columnas
# Basada en operaciones matemáticas
df['Salario_Anual_Bruto'] = df['Salario'] * 1.05 # Añadir 5% de bonus
# Basada en condiciones
df['Rango_Edad'] = np.where(df['Edad'] < 30, 'Joven', 'Senior')
# Usando funciones
def categorizar_salario(salario):
if salario < 35000:
return 'Bajo'
elif salario < 45000:
return 'Medio'
else:
return 'Alto'
df['Categoria_Salario'] = df['Salario'].apply(categorizar_salario)
Transformaciones con GroupBy
# Normalizar salarios dentro de cada departamento
df['Salario_Normalizado'] = df.groupby('Departamento')['Salario'].transform(
lambda x: (x - x.mean()) / x.std()
)
Paso 7: Combinación de DataFrames
Concatenación
# Crear otro DataFrame
nuevos_empleados = pd.DataFrame({
'Nombre': ['Elena', 'Diego'],
'Edad': [29, 35],
'Ciudad': ['Bilbao', 'Málaga'],
'Salario': [39000, 51000],
'Departamento': ['TI', 'Ventas']
})
# Concatenar verticalmente
df_completo = pd.concat([df, nuevos_empleados], ignore_index=True)
Uniones (MERGE)
# Crear DataFrame de departamentos
deptos = pd.DataFrame({
'Departamento': ['Ventas', 'TI', 'RH'],
'Jefe': ['Carlos', 'Ana', 'Marta'],
'Presupuesto': [100000, 150000, 80000]
})
# Unir con el DataFrame principal
df_con_deptos = pd.merge(df, deptos, on='Departamento', how='left')
Paso 8: Manejo de Fechas y Tiempos
# Convertir a datetime
df_fechas = pd.DataFrame({
'nombre': ['A', 'B', 'C'],
'fecha': ['2023-01-15', '2023-02-20', '2023-03-10']
})
df_fechas['fecha'] = pd.to_datetime(df_fechas['fecha'])
# Extraer componentes
df_fechas['año'] = df_fechas['fecha'].dt.year
df_fechas['mes'] = df_fechas['fecha'].dt.month
df_fechas['dia_semana'] = df_fechas['fecha'].dt.day_name()
Paso 9: Operaciones con Texto
# Operaciones comunes en columnas de texto
df['Nombre_Mayusculas'] = df['Nombre'].str.upper()
df['Inicial'] = df['Nombre'].str[0]
df['Contiene_a'] = df['Nombre'].str.contains('a', case=False)
# Dividir texto
df[['Primer_Nombre', 'Apellido']] = df['Nombre'].str.split(' ', expand=True, n=1)
Paso 10: Reestructurar Datos
De Wide a Long Format con melt()
# Datos en formato ancho
df_wide = pd.DataFrame({
'Nombre': ['Ana', 'Luis'],
'Salario_2022': [35000, 42000],
'Salario_2023': [37000, 44000]
})
# Derretir el DataFrame
df_long = pd.melt(df_wide,
id_vars=['Nombre'],
value_vars=['Salario_2022', 'Salario_2023'],
var_name='Año',
value_name='Salario')
Paso 11: Ejemplo Práctico Completo
# Análisis completo: Resumen salarial por ciudad y departamento
resumen_completo = (df
.groupby(['Ciudad', 'Departamento'])
.agg(Empleados=('Nombre', 'count'),
Salario_Promedio=('Salario', 'mean'),
Edad_Promedio=('Edad', 'mean'))
.round(2)
.sort_values('Salario_Promedio', ascending=False)
.reset_index()
)
print("\nResumen completo por ciudad y departamento:")
print(resumen_completo)
Conclusión
¡Felicidades! Ahora dominas los fundamentos para manipular datos en Pandas. Practica con tus propios datasets y explora más funciones avanzadas. Si tienes preguntas, déjalas en los comentarios.
Para más tutoriales sobre ciencia de datos y Python, visita nuestra sección de tutoriales.
¡Con estos conocimientos ya puedes manipular datos en Python usando Pandas!
💡 Tip Importante
🔧 Mejores Prácticas para Manipulación de Datos
Para manipular datos de manera eficiente y efectiva, considera estos consejos:
Usa el método encadenado para operaciones fluidas:
resultado = (df .query('Salario > 35000') .groupby('Departamento') .agg({'Salario': 'mean'}) .sort_values('Salario', ascending=False) .head(3))
Emplea
query()
para filtros más legibles:df_filtrado = df.query('Edad >= 30 and Salario < 50000')
Crea funciones de agregación personalizadas:
def rango_salarial(series): return series.max() - series.min() df.groupby('Departamento')['Salario'].agg(rango_salarial)
Aplica transformaciones a múltiples columnas:
df[['Edad', 'Salario']] = df[['Edad', 'Salario']].apply(lambda x: x * 1.1)
📚 Documentación: Revisa la documentación completa de pandas para manipulación de datos aquí
¡Estos consejos te ayudarán a manipular datos como un experto!
No hay comentarios aún
Sé el primero en comentar este tutorial.