En una entrada anterior explicamos el funcionamiento de las funciones de Pandas para guardar un DataFrame en un libro Excel. Unos métodos que son muy útiles. Aunque tal como se explicó en esa entrada solamente es posible guardar una única hoja. En la entrada de hoy vamos a explicar cómo guardar más de un DataFrame en diferentes hojas Excel con Python.
Problemas con el método to_excel
Los DataFrames de Pandas cuentan con el método to_excel
con el que se exporta el contenido de este a un archivo Excel. Método al que se le puede pasar el nombre del archivo y de la hoja del libro. Parece que simplemente con repetir este proceso llegaría para guardar más de un DataFrame en la misma hoja, pero no es así. Cuando se le indica el nombre de un archivo al método to_excel
este sobrescribe el contenido de este. Borrando el contenido que ya existiese en este.
Crear un objeto para guardar varias hojas Excel con Python
Para solucionar este problema es necesario usar la clase ExcelWriter
de Pandas para crear un objeto de acceso al archivo. Siendo posible de este modo guardar más de una hoja.
Así antes de guardar un DataFrame en un libro de Excel será necesario crear primero una instancia de ExcelWriter
con el nombre del archivo. Posteriormente se guardarán todos los DataFrames necesarios reemplazando en nombre del archivo por el objeto. Finalmente, es necesario guardar explícitamente el archivo, algo que ahora no separa automáticamente, y cerrarlo. Algo que se puede ver en el siguiente ejemplo.
import pandas as pd from seaborn import load_dataset planets = load_dataset("planets") tips = load_dataset("tips") writer = pd.ExcelWriter('archivo.xlsx') planets.to_excel(writer, sheet_name="planets", index=False) tips.to_excel(writer, sheet_name="tips", index=False) writer.save() writer.close()
Para ilustrar esta entrada se ha importado un par de conjunto de datos de la librería Seaborn. Concretamente planets
y tips
, aunque los datos en sí son lo de menos.
En este caso es importante recordar que hasta que se llamen a al métodos save()
los datos no se guardarán en el archivo. Además es necesario cerrar el archivo con el método close()
para evitar posibles problemas
Conclusiones
Hoy hemos visto cómo se tiene que operar para guardar diferentes hojas Excel con Python en un mismo libro. Requiere unos pasos adicionales al método para guardar una única hoja, pero así se pueden guardar los datos de una forma más ordenada.
Imagen de StartupStockPhotos en Pixabay
Mario dice
Buenas tardes:
Mi duda es la siguiente, lo que quiero es importar una pestaña de excel a un dataframe, la manipulo y luego guardar esa pestaña actualizada.
Se hacer todos los pasos menos exportar/actualizar la pestaña sin machacar el resto de pestañas.
En este post se construye un excel con varias pestañas a partir de varios Dataframes, yo lo que quiero es actualizar una una única pestaña manipulada a través de operaciones con Dataframes.
Muchas gracias.
Daniel Rodríguez dice
Que yo sepa no se pude con pandas, para eso es necesario usar otra librería como xlwings (https://docs.xlwings.org/en/stable/quickstart.html#interact-with-excel-from-python).
Grevall dice
Gracias por el aporte, una consulta, si quisiéramos exportar en una solo libro de Excel pero en diferentes hojas/pestañas con el nombre en especifico de registros de un campo/columna, como sería?
Daniel Rodríguez dice
Si lo que se desea es exportar solamente unas columnas de un DataFrame lo que se debería hacer es seleccionar estas y exportar el DataFrame resultante, eso para cada una de las hojas del libro.
Sebastian Silva dice
Hola, Si lo que quiero es leer un archivo ya existente de excel que tiene una hoja. Y un se quiere pegar un dataframe en una segunda hoja, que debería hacer?
El archivo de excel inicialmente tenía una hoja y quedaría con dos. No se como hacerlo porque siempre que pego el df en el archivo se borra la primera hoja.
Muchas gracias si me puedes ayudar.
Daniel Rodríguez dice
ExcelWriter por defecto crear un libro nuevo sobre el existente, para evitar eso se puede asignar el valor
'a'
a la propiedadmode
, de este modo se añadirán las nuevas hojas a las ya existentes.