Ir al contenido
Jossua Servicios
Python

Python para usuarios de Excel: lee, filtra y resume tus datos con pandas

Guía práctica de pandas para quien ya sabe Excel: leer un .xlsx, filtrar, crear columnas, armar una tabla dinámica con pivot_table y guardar el reporte en Excel.

Por Jossua4 de noviembre de 20264 min de lectura
Código de Python con pandas que lee un Excel y crea una tabla dinámica por ciudad y mes

Si ya sabes filtrar, crear columnas con fórmulas y armar tablas dinámicas en Excel, ya entiendes buena parte de lo que hace pandas, la librería de Python para trabajar con tablas. La diferencia es que en Python cada paso queda escrito, se repite sin errores y funciona igual con 500 filas que con 5 millones.

En esta guía vas a leer un archivo de Excel con ventas, filtrarlo, crear columnas, resumirlo como una tabla dinámica y guardar el resultado en un Excel nuevo. Cada paso lleva su equivalente en Excel para que no te pierdas.

Lo que necesitas instalar

  1. Python 3 desde python.org (en Windows, marca la casilla “Add python.exe to PATH” durante la instalación).
  2. Las librerías pandas y openpyxl (esta última es la que permite leer y escribir archivos .xlsx). Abre una terminal y ejecuta:
pip install pandas openpyxl

Para escribir y ejecutar el código puedes usar Visual Studio Code, Jupyter Notebook o incluso el editor IDLE que viene con Python. Si prefieres no instalar nada, Google Colab funciona en el navegador.

Paso 1: leer el Excel

Supón un archivo ventas.xlsx con una hoja llamada Ventas y las columnas Fecha, Producto, Ciudad, Cantidad y Precio.

import pandas as pd

df = pd.read_excel("ventas.xlsx", sheet_name="Ventas")

print(df.head())      # primeras 5 filas
print(df.shape)       # (filas, columnas)
df.info()             # tipos de dato de cada columna

A la tabla en memoria se le llama DataFrame y, por costumbre, se nombra df. Es el equivalente a tu hoja con datos.

Un detalle útil. df.info() te dice si pandas leyó la Fecha como fecha (datetime64) y Cantidad como número (int64 o float64). Si algo aparece como object o str, es texto, igual que un número guardado como texto en Excel.

Paso 2: filtrar filas

En Excel usarías el botón de Filtro. En pandas escribes la condición entre corchetes:

# Solo las ventas de Manta
manta = df[df["Ciudad"] == "Manta"]

# Ventas de Manta con más de 10 unidades (Y = &)
grandes = df[(df["Ciudad"] == "Manta") & (df["Cantidad"] > 10)]

# Manta o Portoviejo
costa = df[df["Ciudad"].isin(["Manta", "Portoviejo"])]

Cada condición va entre paréntesis. Para “Y” se usa & y para “O” se usa |.

Paso 3: crear columnas calculadas

En Excel escribirías =D2*E2 y arrastrarías la fórmula hacia abajo. En pandas la operación se aplica a toda la columna de una vez:

df["Total"] = df["Cantidad"] * df["Precio"]

# Una columna con el mes, a partir de la fecha
df["Mes"] = df["Fecha"].dt.to_period("M").astype(str)

# Equivalente a un SI(): clasificar ventas
df["Tipo"] = df["Total"].apply(lambda t: "Grande" if t >= 100 else "Normal")

Paso 4: ordenar

# De mayor a menor total
df = df.sort_values("Total", ascending=False)

Paso 5: resumir como una tabla dinámica

Aquí es donde pandas brilla. Para ver el total vendido por ciudad, usas groupby:

por_ciudad = df.groupby("Ciudad", as_index=False)["Total"].sum()
print(por_ciudad)

Y para una tabla dinámica completa, con ciudades en filas y meses en columnas, usas pivot_table:

tabla = pd.pivot_table(
    df,
    index="Ciudad",       # filas
    columns="Mes",        # columnas
    values="Total",       # valores
    aggfunc="sum",        # resumir con suma
    fill_value=0,         # celdas vacías como 0
    margins=True,         # agrega totales
    margins_name="Total"
)
print(tabla)

Son las mismas cuatro decisiones que tomas al armar una tabla dinámica en Excel: qué va en filas, qué en columnas, qué valor y cómo resumirlo.

Paso 6: guardar el resultado en Excel

Puedes guardar varias tablas en hojas distintas del mismo archivo:

with pd.ExcelWriter("reporte_ventas.xlsx") as writer:
    df.to_excel(writer, sheet_name="Detalle", index=False)
    por_ciudad.to_excel(writer, sheet_name="Por ciudad", index=False)
    tabla.to_excel(writer, sheet_name="Ciudad x Mes")

Abre reporte_ventas.xlsx y tendrás las tres hojas listas. El mes que viene, reemplaza ventas.xlsx por el archivo nuevo, ejecuta el script y el reporte se genera en segundos.

El script completo

import pandas as pd

df = pd.read_excel("ventas.xlsx", sheet_name="Ventas")

df["Total"] = df["Cantidad"] * df["Precio"]
df["Mes"] = df["Fecha"].dt.to_period("M").astype(str)

por_ciudad = (df.groupby("Ciudad", as_index=False)["Total"]
                .sum()
                .sort_values("Total", ascending=False))

tabla = pd.pivot_table(df, index="Ciudad", columns="Mes", values="Total",
                       aggfunc="sum", fill_value=0, margins=True, margins_name="Total")

with pd.ExcelWriter("reporte_ventas.xlsx") as writer:
    df.to_excel(writer, sheet_name="Detalle", index=False)
    por_ciudad.to_excel(writer, sheet_name="Por ciudad", index=False)
    tabla.to_excel(writer, sheet_name="Ciudad x Mes")

print("Reporte listo")

Excel y pandas, lado a lado

En Excel En pandas
Abrir el archivo pd.read_excel("archivo.xlsx")
Filtro df[df["Ciudad"] == "Manta"]
Columna con fórmula df["Total"] = df["Cantidad"] * df["Precio"]
Ordenar df.sort_values("Total", ascending=False)
SUMAR.SI por ciudad df.groupby("Ciudad")["Total"].sum()
Tabla dinámica pd.pivot_table(...)
Quitar duplicados df.drop_duplicates()
Guardar como df.to_excel("nuevo.xlsx", index=False)

Errores típicos al empezar

  • FileNotFoundError: Python no encuentra el archivo. Pon el script en la misma carpeta que el Excel o usa la ruta completa, por ejemplo r"C:Reportesventas.xlsx" (la r evita problemas con las barras invertidas).
  • ImportError: Missing optional dependency ‘openpyxl’: falta instalar openpyxl con pip install openpyxl.
  • KeyError: ‘Ciudad’: la columna se llama distinto en tu archivo, quizá con un espacio al final. Revisa con print(df.columns).
  • PermissionError al guardar: el archivo de salida está abierto en Excel. Ciérralo y vuelve a ejecutar.

No necesitas dejar Excel para usar Python. La combinación más poderosa es usar Python para el trabajo repetitivo y pesado, y Excel o Power BI para presentar los resultados. En los próximos artículos veremos cómo combinar varios Excel en uno y cómo crear gráficos con matplotlib.

JossuaConsultor en Business Intelligence y Analítica de Datos. Manta, Ecuador.

Sigue con Python

Otros artículos del mismo tema.