Volver al curso

Data Science con Python: Análisis de Datos para Tu Carrera

leccion
6 / 23
intermediate
8 horas
Pandas y Manipulacion de Datos

Series y DataFrames: Los Fundamentos de Pandas

Lectura
55 min~4 min lectura

Series y DataFrames: Los Fundamentos de Pandas

La Libreria Mas Importante de Data Science

Pandas es, sin exageracion, la libreria que mas vas a usar en tu carrera como analista o cientifico de datos. Es la herramienta estandar para manipular datos tabulares (tablas con filas y columnas) en Python. Todo lo que hacias con Excel, ahora lo podes hacer con Pandas pero de forma automatizada, reproducible y con millones de filas.

import pandas as pd
import numpy as np

print(f"Pandas version: {pd.__version__}")

Series: Una Columna de Datos

Una Series es un array unidimensional con etiquetas (indice). Pensalo como una columna de una tabla de Excel.

# Crear una Series desde una lista
ventas = pd.Series([120, 135, 98, 145, 167, 189])
print(ventas)
# 0    120
# 1    135
# 2     98
# 3    145
# 4    167
# 5    189
# dtype: int64

# Series con indice personalizado
ventas_mensual = pd.Series(
    [120, 135, 98, 145, 167, 189],
    index=['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun'],
    name='Ventas (miles)'
)
print(ventas_mensual)
print(f"\nVentas de Marzo: {ventas_mensual['Mar']}")
print(f"Ventas Q1: {ventas_mensual['Ene':'Mar'].sum()}")

Operaciones con Series

# Estadisticas
print(f"Promedio: {ventas_mensual.mean():.1f}")
print(f"Mediana: {ventas_mensual.median():.1f}")
print(f"Desv. Est.: {ventas_mensual.std():.1f}")
print(f"Total: {ventas_mensual.sum()}")

# Operaciones vectorizadas (como NumPy)
ventas_con_iva = ventas_mensual * 1.21
crecimiento = ventas_mensual.pct_change() * 100  # Cambio porcentual

# Filtrado booleano
ventas_altas = ventas_mensual[ventas_mensual > 140]
print(f"\nMeses con ventas > 140:\n{ventas_altas}")

# Metodos utiles
print(f"\nTop 3 meses: {ventas_mensual.nlargest(3).index.tolist()}")
print(f"Peor mes: {ventas_mensual.idxmin()} ({ventas_mensual.min()})")

DataFrame: Tu Tabla de Datos

Un DataFrame es una tabla bidimensional con filas y columnas etiquetadas. Es la estructura principal de Pandas.

# Crear un DataFrame desde un diccionario
df = pd.DataFrame({
    'nombre': ['Ana Garcia', 'Carlos Lopez', 'Maria Rodriguez', 'Luis Fernandez', 'Sofia Martinez'],
    'edad': [28, 34, 25, 42, 31],
    'departamento': ['Marketing', 'Ventas', 'IT', 'Ventas', 'Marketing'],
    'salario': [65000, 72000, 85000, 68000, 71000],
    'evaluacion': [4.5, 3.8, 4.9, 3.2, 4.1]
})

print(df)
print(f"\nForma: {df.shape}")  # (5, 5) = 5 filas, 5 columnas
print(f"Columnas: {df.columns.tolist()}")
print(f"Tipos de datos:\n{df.dtypes}")

Exploracion inicial (lo primero que haces con cualquier dataset)

# Las 5 funciones que SIEMPRE ejecutas al cargar un dataset
print(df.head())          # Primeras 5 filas
print(df.tail(3))         # Ultimas 3 filas
print(df.info())          # Tipos de datos, valores no nulos
print(df.describe())      # Estadisticas de columnas numericas
print(df.shape)           # Dimensiones

Seleccion de Datos

Seleccionar columnas

# Una columna (retorna Series)
nombres = df['nombre']
print(type(nombres))  # <class 'pandas.core.series.Series'>

# Multiples columnas (retorna DataFrame)
subset = df[['nombre', 'salario', 'departamento']]
print(subset)

# Acceso con punto (solo si el nombre no tiene espacios)
print(df.edad.mean())

Seleccionar filas

# Por indice numerico (iloc)
print(df.iloc[0])       # Primera fila
print(df.iloc[1:4])     # Filas 1 a 3
print(df.iloc[-1])      # Ultima fila

# Por etiqueta (loc)
print(df.loc[0])                        # Fila con indice 0
print(df.loc[0:2, ['nombre', 'salario']])  # Filas 0-2, columnas especificas

# Filtrado condicional (lo mas importante)
mayores_30 = df[df['edad'] > 30]
print(f"\nEmpleados mayores de 30:\n{mayores_30}")

# Multiples condiciones
ventas_senior = df[(df['departamento'] == 'Ventas') & (df['edad'] > 30)]
print(f"\nVendedores senior:\n{ventas_senior}")

# Operador isin
seleccion = df[df['departamento'].isin(['Marketing', 'IT'])]
print(f"\nMarketing o IT:\n{seleccion}")

Crear y Modificar Columnas
# Nueva columna calculada
df['salario_mensual'] = df['salario'] / 12
df['bono_anual'] = df['salario'] * df['evaluacion'] / 100

# Columna condicional
df['nivel'] = df['evaluacion'].apply(lambda x: 'Alto' if x >= 4.0 else 'Normal')

# Alternativa con np.where
df['senior'] = np.where(df['edad'] >= 35, 'Si', 'No')

# Categorizar con pd.cut
df['rango_salarial'] = pd.cut(
    df['salario'],
    bins=[0, 65000, 75000, 100000],
    labels=['Bajo', 'Medio', 'Alto']
)

print(df[['nombre', 'salario', 'rango_salarial', 'nivel', 'senior']])

Ordenar Datos
# Ordenar por una columna
df_ordenado = df.sort_values('salario', ascending=False)
print("Ordenado por salario (mayor a menor):")
print(df_ordenado[['nombre', 'salario']])

# Ordenar por multiples columnas
df_multi = df.sort_values(['departamento', 'evaluacion'], ascending=[True, False])
print("\nOrdenado por departamento y evaluacion:")
print(df_multi[['nombre', 'departamento', 'evaluacion']])

Video Recomendado

Pandas Tutorial Completo en Espanol - Desde Cero


Ejercicio Practico

Crea un notebook 06_pandas_basico.ipynb:

  1. Crea un DataFrame con datos de 20 estudiantes (nombre, edad, carrera, promedio, semestre)
  2. Explora el dataset con head, info, describe, shape
  3. Filtra estudiantes con promedio > 8.0
  4. Crea una columna 'estado' que sea 'Aprobado' si promedio >= 6.0, sino 'Reprobado'
  5. Ordena por promedio descendente y muestra el top 5
  6. Calcula el promedio de notas por carrera

💡 Concepto Clave

Revisemos los puntos más importantes de esta lección antes de continuar.

Resumen

  • Series: Array 1D con etiquetas (una columna)
  • DataFrame: Tabla 2D con filas y columnas etiquetadas
  • Exploracion: head(), info(), describe(), shape
  • Seleccion: df['col'], df.iloc[], df.loc[], filtros booleanos
  • Nuevas columnas: apply(), np.where(), pd.cut()
  • Ordenar: sort_values()
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
  • Comprendo el concepto principal y puedo explicarlo con mis palabras
  • Entiendo cómo aplicarlo en mi situación específica
  • Necesito repasar algunas partes antes de continuar
  • Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.