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/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 es 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[1] # Corregido de shape[0] a shape[1] para columnas
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 dónde 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(df2.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.