Creando archivos Excel desde Python con Pandas y ExcelWriter
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 = /images/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.