Crear un archivo Excel con pandas en Python

Con pandas, una tabla de datos se convierte en un archivo de Excel en una línea. Lo que ha cambiado desde que se escribió esta página es casi todo lo de alrededor, y el ejemplo antiguo ya no funciona.

Instalarlo

pip install pandas openpyxl

Dentro de un entorno virtual. pandas no escribe archivos de Excel por su cuenta: usa openpyxl para los .xlsx, y si falta, da un error al guardar. La versión anterior de esta página recomendaba sudo apt install python3-pandas, que instala la versión de tu distribución, normalmente antigua, y sin openpyxl.

Una hoja

import pandas as pd

df = pd.DataFrame({"Id": [1, 3, 2, 4],
                   "Nombre": ["Juan", "Eva", "María", "Pablo"],
                   "Apellido": ["Méndez", "López", "Tito", "Hernández"]})

df.to_excel("ejemplo.xlsx", sheet_name="Hoja de datos", index=False)

index=False evita una primera columna con los números de fila 0, 1, 2, 3, que pandas añade si no se lo impides. Casi nunca la quieres.

Varias hojas

ventas = pd.DataFrame({"producto": ["camiseta", "bufanda"], "unidades": [12, 3]})

with pd.ExcelWriter("varias.xlsx") as w:
    df.to_excel(w, sheet_name="Personas", index=False)
    ventas.to_excel(w, sheet_name="Ventas", index=False)
salidahojas: ['Personas', 'Ventas']

El with guarda y cierra el archivo al salir del bloque.

Por qué el ejemplo anterior ya no funciona

writer = ExcelWriter("viejo.xlsx")
df.to_excel(writer, "Hoja de datos", index=False)
writer.save()
salidaTypeError: NDFrame.to_excel() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given
Dos cambios de pandas lo rompen. El nombre de la hoja ya no se puede pasar por posición: hay que escribir sheet_name="…". Y aunque pasaras de esa línea, writer.save() ya no existe: se sustituyó por writer.close() o, mejor, por el with de arriba. Es un buen recordatorio de por qué conviene fijar las versiones en un requirements.txt: un ejemplo que funcionaba en 2017 falla igual en tu proyecto el día que actualizas.
Para dar formato —negritas, colores, anchos de columna, fórmulas— pandas se queda corto. Lo habitual es escribir con pandas y luego abrir el archivo con openpyxl para retocarlo, o hacerlo todo directamente con openpyxl.

Más información en inglés: Create an Excel file in Python.

Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.

3 comentarios en «Crear un archivo Excel con pandas en Python»

Deja un comentario