Truco Python: Importar todas las hojas de un libro Excel con Pandas

Publicado el 15 marzo 2021 por Daniel Rodríguez @analyticslane

Recientemente en los comentarios del blog se ha planteado el problema de cargar todas las hojas de un libro Excel en un único paso. Algo que no se puede hacer con Pandas, ya que el método read_excel() solamente puede importar una hoja. Algo que tiene sentido, ya que en un DataFrame es difícil combinar el contenido de más de una hoja de forma automática. En esta ocasión vamos a ver cómo definir una pequeña función con la que se puede cargar todas las hojas de un libro Excel en un diccionario. Aunque no sería difícil modificar esta para que el contenido se guarde en una lista.

La clase ExcelFile de Pandas

En esta ocasión como queremos acceder a más de un elemento de un libro Excel vamos a utilizar la clase ExcelFile de Pandas en lugar del método read_excel(). Esta clase crea una instancia que hace referencia a un archivo, por lo que es más fácil iterar sobre el contenido de este.

Para crear una clase con la que se puede trabajar con un archivo libro Excel solamente se tiene que llamar al constructor con la ruta. Lo que nos devolverá un objeto. El cual tiene una propiedad sheet_names en la que se encuentra el nombre de todos las hojas y un método parse() con el cual se puede importar cada una de las hojas de manera análoga a como se hace con el método read_excel().

Así que, para obtener el contenido de un archivo solamente hay que crear una instancia con la ruta al archivo e iterar sobre las hojas.

Función para importar todas las hojas de un libro Excel

Así podemos definir la siguiente función para importar todas las hojas de un libro.

import os.path
import pandas as pd

def readAllSheets(filename):
    if not os.path.isfile(filename):
        return None
    
    xls = pd.ExcelFile(filename)
    sheets = xls.sheet_names

    results = {}

    for sheet in sheets:
        results[sheet] = xls.parse(sheet)
        
    xls.close()
    
    return results, sheets

En esta función en primer lugar se comprueba que el nombre de archivo existe, para lo que se usa el método os.path.isfile(). En caso de que no sea un archivo se devolverá el valor None para evitar problemas.

Una vez hecho esto se puede crear el objeto ExcelFile y se obtiene el listado de hojas a partir de este. Listado de hojas sobre el que se iterara guardando las hojas en un diccionario. Lo que se puede cambiar fácilmente por una lista en el caso de que se prefiera esta opción.

Finalmente se cierra el acceso al archivo con el método close() y se devuelve el diccionario con el listado de hojas.

Conclusiones

En esta ocasión hemos visto cómo se puede crear una función para automatizar el proceso de importar todas las hojas de un libro Excel con Pandas. Algo que puede ser de utilidad cuando los libros con los que trabajamos contienen muchos datos similares.

Imagen de Theodor Moise en Pixabay