Creando archivos Excel desde Python con Pandas y ExcelWriter

18 Oct

Crear archivos Excel desde un data frame de Python Pandas nos va a servir para tener unos breves apuntes de ExcelWriter y algunos ejemplos de manipulación de archivos Excel desde Python. Para este ejemplo vamos a trabajar con un archivo que está en el blog y por ello el primer paso será descargar el Excel para crear el data frame de trabajo:

import requests
import pandas as pd

arch = https://analisisydecision.es/wp-content/uploads/2021/10/ejemplo_python.xlsx
resp = requests.get(arch)

salida = open('c:/temp/ejemplo_python.xlsx', 'wb')
salida.write(resp.content)
salida.close()

En este punto ya podemos crear nuestro data frame leyendo directamente el Excel con Pandas:

df = pd.read_excel('c:/temp/ejemplo_python.xlsx', sheet_name='Hoja1')
df.describe()

La forma más sencilla de crear un archivo Excel desde Python es:

df2 = df[['Var1','Var2']]
df2.to_excel("c:/temp/ejemplo_python2.xlsx",
             sheet_name='Parte1')

Pero como os decía vamos a aprovechar para hacer algunas tareas adicionales con ExcelWriter. Por supuesto, lo más sencillo crear el mismo Excel con ExcelWriter:

 df2.to_excel('c:/temp/ejemplo_python2.xlsx', engine='xlsxwriter')

Pero queremos dividir nuestro data frame en múltiples hojas de Excel:

df2 = df[['Var1','Var2']]
df3 = df[['Var3','Var4']]
df4 = df[['Var5']]

writer = pd.ExcelWriter('c:/temp/ejemplo_python2.xlsx', engine='xlsxwriter')

df2.to_excel(writer, sheet_name='Parte1', index=False)
df3.to_excel(writer, sheet_name='Parte2', index=False)

columna_inicio = df2.shape[0]
df4.to_excel(writer, sheet_name='Parte1', index=False, startcol=columna_inicio)
writer.save() 

Además de crear varias hojas de Excel con nombre Parte para cada data frame eliminamos los índices de la salida y el último de los data frames lo añadimos tras la última columna en la hoja de Excel Parte1, es como añadir horizontalmente datos y esta labor la realizamos con la opción startcol, simplemente tenemos que controlar donde añadimos. Por el contrario, si deseamos anexar verticalmente:

 df2 = df[['Var1','Var2']]
df3 = df[['Var3','Var4']]
df4 = df[['Var5']]

writer = pd.ExcelWriter('c:/temp/ejemplo_python2.xlsx', engine='xlsxwriter')

df2.to_excel(writer, sheet_name='Parte1', index=False)
df4.to_excel(writer, sheet_name='Parte1', index=False, startrow=len(df.index)+1, header=False)
writer.save()

Es análogo al código anterior pero necesitamos la opción header = False para evitar poner el encabezado del data frame en el Excel resultante. Un par de apuntes que, espero, sean de utilidad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *