Python e IA

Tutorial de pandas: DataFrames para usuarios de Excel

Aprende DataFrames de pandas desde Excel: filtros, fórmulas, cruces tipo BUSCARV, tablas dinámicas y exportación a Excel, con ejemplos de Python reales.

Por Equipo editorial de DashCore HubActualizado 8 min de lectura

pandas es una librería de Python que te permite trabajar con tablas igual que en Excel, pero con código en lugar de clics. Un DataFrame de pandas es, en esencia, una hoja de cálculo: filas, columnas con nombre y un tipo de dato por columna. Este tutorial traduce las tareas de Excel que ya dominas (filtros, fórmulas, BUSCARV, tablas dinámicas) a su equivalente en pandas para que seas productivo desde el primer día.

Los DataFrames explicados para usuarios de Excel

Piensa en un DataFrame como una Tabla de Excel (la que creas con Ctrl+T), con algunas diferencias:

Concepto en ExcelConcepto en pandasNotas
Hoja / TablaDataFramePor convención se llama df
ColumnaSeriesUna sola columna, por ejemplo df["Sales"]
Números de filaIndexEmpieza en 0 y puede reemplazarse por fechas o IDs
Formato de celda (número, fecha, texto)dtypeRevísalos todos con df.dtypes
Fórmula en una celdaOperación vectorizadaUna línea calcula toda la columna a la vez

El gran cambio de mentalidad: en Excel escribes una fórmula en una celda y la arrastras hacia abajo. En pandas escribes la operación una sola vez para toda la columna. No hay que arrastrar, no se rompen rangos y no se te olvidan filas al final.

¿Eres nuevo en Python? Lee primero Python para análisis de datos: por dónde empezar para preparar tu entorno.

Cargar y revisar los datos

pandas lee archivos CSV, Excel, JSON, bases de datos SQL y más. Para leer archivos .xlsx necesitas el paquete openpyxl (incluido en Anaconda).

import pandas as pd

df = pd.read_excel("orders.xlsx", sheet_name="Orders")
# o bien: df = pd.read_csv("orders.csv")

df.head()        # primeras 5 filas
df.shape         # (filas, columnas)
df.info()        # nombres de columnas, tipos y cantidad de valores
df.describe()    # conteo, promedio, mínimo y máximo de columnas numéricas

Ejecuta df.info() cada vez que cargues un archivo. Si una columna que debería ser numérica aparece como object, casi siempre contiene texto como "N/A" o símbolos de moneda. Corrígelo con pd.to_numeric(df["Amount"], errors="coerce"), que convierte todo lo que no sea número en un valor vacío que luego puedes revisar.

Combinar muchos archivos a la vez

En Excel, apilar doce archivos mensuales significa copiar y pegar muchas veces (o anexar consultas en Power Query). En pandas son unas pocas líneas, y funcionan igual con tres archivos que con trescientos:

from pathlib import Path

files = sorted(Path("exports").glob("sales_*.csv"))
df = pd.concat([pd.read_csv(f) for f in files], ignore_index=True)
print(len(files), "archivos,", len(df), "filas")

Imprimir la cantidad de archivos y filas es un control sencillo: si falta un mes o un archivo viene vacío, lo notas de inmediato y no en medio de una reunión.

Tareas de Excel traducidas a pandas

Seleccionar y filtrar (Autofiltro)

# Quedarte solo con algunas columnas
df[["OrderDate", "Customer", "Region", "Amount"]]

# Filtro: Region es East Y Amount mayor que 500
df[(df["Region"] == "East") & (df["Amount"] > 500)]

# Filtrar por una lista de valores (como marcar casillas en el Autofiltro)
df[df["Region"].isin(["East", "West"])]

# El texto contiene...
df[df["Customer"].str.contains("Market", case=False, na=False)]

Usa & para Y, | para O, y pon siempre cada condición entre paréntesis. Olvidar los paréntesis es el error de pandas más común entre principiantes.

Columnas calculadas (fórmulas)

import numpy as np

df["Revenue"] = df["Units"] * df["UnitPrice"]
df["Margin %"] = (df["Revenue"] - df["Cost"]) / df["Revenue"]

# Equivalente a SI (IF)
df["Size"] = np.where(df["Revenue"] >= 1000, "Large", "Small")

# Partes de la fecha, como AÑO (YEAR) y MES (MONTH)
df["OrderDate"] = pd.to_datetime(df["OrderDate"])
df["Year"] = df["OrderDate"].dt.year
df["Month"] = df["OrderDate"].dt.month

Ordenar y quitar duplicados

df = df.sort_values(["Region", "Revenue"], ascending=[True, False])
df = df.drop_duplicates(subset=["OrderID"])

BUSCARV (VLOOKUP) y BUSCARX (XLOOKUP): merge

En Excel usarías BUSCARX para traer el segmento del cliente a la tabla de pedidos. En pandas unes dos DataFrames por una columna en común:

customers = pd.read_excel("customers.xlsx")
df = df.merge(customers[["CustomerID", "Segment"]],
              on="CustomerID", how="left")

how="left" conserva todos los pedidos aunque no encuentre el cliente, igual que BUSCARX cuando devuelve un vacío. A diferencia de BUSCARV, un merge puede cruzar por varias columnas a la vez y devuelve todas las coincidencias, así que revisa primero si hay claves duplicadas en la tabla de búsqueda con customers["CustomerID"].duplicated().sum(). Nuestra comparación BUSCARX vs BUSCARV vs INDICE-COINCIDIR cubre el lado de Excel, y JOINs en SQL explicados muestra la misma lógica en SQL.

Tablas dinámicas: groupby y pivot_table

# Ingreso total y promedio por región
df.groupby("Region")["Revenue"].agg(["sum", "mean", "count"])

# Tabla dinámica clásica: regiones en filas, años en columnas
pd.pivot_table(df, values="Revenue", index="Region",
               columns="Year", aggfunc="sum", fill_value=0)

pivot_table funciona casi igual que el cuadro de diálogo de Excel: index son las Filas, columns las Columnas, values los Valores y aggfunc equivale a "Resumir valores por".

Consejo: Encadena los pasos dentro de paréntesis para que toda la transformación se lea de arriba abajo como una receta, y guarda el DataFrame original sin tocar en otra variable. Así siempre podrás repetir la limpieza desde cero.

Valores vacíos y datos desordenados

Los archivos exportados casi nunca vienen limpios. Estos comandos resuelven la mayoría de los problemas:

  • df.isna().sum() cuenta los valores vacíos por columna.
  • df["Region"] = df["Region"].fillna("Unknown") rellena los vacíos con una etiqueta.
  • df = df.dropna(subset=["Amount"]) elimina las filas sin monto.
  • df["Customer"] = df["Customer"].str.strip().str.title() equivale a usar ESPACIOS (TRIM) y NOMPROPIO (PROPER) juntos.
  • df.columns = df.columns.str.strip() quita espacios ocultos de los encabezados, una causa frecuente del error KeyError.

Decide de forma consciente si rellenas o eliminas los vacíos, porque esa elección cambia tus totales y promedios. Si tienes dudas, cuenta cuántas filas se ven afectadas antes de decidir y deja esa decisión anotada en un comentario.

Errores comunes y qué significan

  • KeyError: 'Sales': la columna no existe exactamente como la escribiste. Imprime df.columns y revisa ortografía, mayúsculas y espacios ocultos.
  • SettingWithCopyWarning: modificaste una porción filtrada. Agrega .copy() al crear el DataFrame filtrado, por ejemplo east = df[df["Region"] == "East"].copy().
  • Los totales salen inflados después de un merge: la tabla de búsqueda tenía claves duplicadas y las filas se multiplicaron. Compara len(df) antes y después de cada merge.
  • Las fechas se ordenan alfabéticamente: la columna sigue siendo texto. Conviértela con pd.to_datetime antes de ordenar o agrupar.

Exportar los resultados a Excel

summary = pd.pivot_table(df, values="Revenue", index="Region",
                         columns="Year", aggfunc="sum", fill_value=0)

with pd.ExcelWriter("report.xlsx") as writer:
    df.to_excel(writer, sheet_name="Data", index=False)
    summary.to_excel(writer, sheet_name="Pivot")

Así obtienes un libro que tus compañeros pueden abrir normalmente. Para agregar formato, gráficos y programar la ejecución, continúa con Automatiza reportes de Excel con Python.

Atajo con IA: Cuando sabes hacerlo en Excel pero no en pandas, pregúntale directamente a un asistente: "En Excel uso SUMAR.SI.CONJUNTO(Revenue, Region, "East", Year, 2025). ¿Cuál es el equivalente en pandas para un DataFrame df con las columnas Region, Year y Revenue? Muéstrame dos formas y explica la diferencia". Comparar dos respuestas te enseña más que copiar una sola.

pandas vs Excel: cuándo usar cada uno

pandas brilla con archivos grandes, limpiezas repetitivas, la combinación de muchas fuentes y cualquier proceso que necesites repetir exactamente igual el próximo mes. Excel es más rápido para preguntas puntuales, exploraciones manuales tipo "¿qué pasaría si...?" y para compartir con personas que no programan. Muchos analistas usan ambos: pandas prepara los datos y Excel o Power BI los presentan. Una regla práctica: si ya hiciste la misma limpieza manual tres veces, es hora de convertirla en un script.

Otra ventaja es la transparencia. Un script de pandas deja por escrito cada paso: qué filas se eliminaron, cómo se rellenaron los vacíos y qué tablas se unieron. Cuando un gerente pregunte de dónde salió una cifra, podrás mostrar la lógica exacta en vez de intentar recordar qué celdas editaste a mano el martes pasado.

Próximos pasos

Elige un reporte que armes cada semana en Excel y reconstrúyelo en pandas: cargar, limpiar, cruzar, resumir y exportar. Compara los totales con tu versión de Excel hasta que coincidan. Cuando funcione, agrega un gráfico con Matplotlib o Plotly e intenta ejecutar el script con el archivo de la próxima semana sin cambiar ni una línea.

Mira: lecciones en video

Pandas & Python for Data Analysis by Example – Full Course for Beginnerspor freeCodeCamp.org · Ver en YouTube ↗Video en inglés — activa los subtítulos traducidos en YouTube si los necesitas.

Preguntas frecuentes

¿Es difícil aprender pandas si ya sé Excel?

Quienes vienen de Excel suelen aprender pandas más rápido porque los conceptos son los mismos: tablas, filtros, fórmulas y tablas dinámicas. El principal ajuste es escribir operaciones para columnas completas en lugar de celdas individuales.

¿Cuál es el equivalente de BUSCARV en pandas?

El método merge, por ejemplo df.merge(tabla_busqueda, on="Key", how="left"). También admite claves de varias columnas y devuelve todas las coincidencias, así que revisa antes si hay claves duplicadas.

¿pandas puede leer archivos de Excel con varias hojas?

Sí. pd.read_excel("archivo.xlsx", sheet_name=None) devuelve un diccionario con un DataFrame por hoja, y también puedes indicar el nombre de una hoja o una lista de nombres.

¿Qué tan grande puede ser un archivo en pandas?

Depende sobre todo de la memoria de tu computadora, porque pandas carga los datos en la RAM. Archivos de millones de filas suelen funcionar bien en una laptop moderna; para volúmenes mayores, lee solo las columnas necesarias o usa una base de datos.

¿Aprendes con la Academia?
Marca esta lección como completada para seguir tu progreso.
Hacer el quiz