Python

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

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

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: PandasTruco

Recent Posts

Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos

Hace poco publiqué una entrada en la que trataba de un sesgo bien documentado: aferrarse…

4 días ago

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

6 días ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

7 días ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

2 semanas ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

2 semanas ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

3 semanas ago

This website uses cookies.