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

Cómo Elegir el Test de Hipótesis Correcto para tus Datos

Tienes dos grupos de datos y quieres saber si son estadísticamente distintos. O tienes una…

8 horas ago

Tuplas vs Listas en Python: parecen lo mismo, pero no

A primera vista, tuplas y listas son casi idénticas. Ambas guardan colecciones ordenadas de elementos.…

2 días ago

Qué significa realmente “calidad de datos”

"Nuestros datos no tienen buena calidad." Escuchas esto constantemente en reuniones. El problema es que…

1 semana ago

Cómo Detectar Pseudo-IDs y Data Leakage en el Constructor de Scorecards

El artículo Data Leakage en Credit Scoring explicó por qué este es el error más…

1 semana ago

Cómo Verificar la Normalidad de tus Datos antes de un Test Estadístico

Antes de aplicar muchos tests estadísticos clásicos (el t-test, el ANOVA, la regresión lineal) aparece…

2 semanas ago

Docker Compose: el día a día. Cómo ver qué funciona y qué no

Si acabas de montar tu aplicación en Docker Compose, la primera pregunta que haces cada…

2 semanas ago

This website uses cookies.