Leer y escribir archivos de Excel (XLSX) en Python con Pandas Library

En este tutorial, leeremos y escribiremos archivos de Excel en Python con Pandas, incluidos ejemplos del uso de DataFrames y el manejo de archivos.

Introducción

Al igual que con todos los demás tipos de archivos, también puede usar la biblioteca Pandas para leer y escribir archivos de Excel usando Python. En este breve tutorial, vamos a discutir cómo leer y escribir archivos de Excel a través de DataFrames.

Además de lectura y escritura simples, también aprenderemos cómo escribir múltiples DataFrame en un archivo de Excel, cómo leer filas y columnas específicas de una hoja de cálculo y cómo nombrar hojas individuales y múltiples dentro de un archivo antes de hacer nada. .

Si desea obtener más información sobre otros tipos de archivos, lo tenemos cubierto:

Lectura y escritura de archivos de Excel en Python con pandas {#lectura y escritura de archivos de Excel en Python con pandas}

Naturalmente, para usar Pandas, primero tenemos que instalarlo. El método más fácil para instalarlo es a través de pip.

Si está ejecutando Windows:

1
$ python pip install pandas

Si estás usando Linux o MacOS:

1
$ pip install pandas

Tenga en cuenta que puede obtener un error ModuleNotFoundError o ImportError al ejecutar el código de este artículo. Por ejemplo:

1
ModuleNotFoundError: No module named 'openpyxl'

Si este es el caso, deberá instalar los módulos que faltan:

1
$ pip install openpyxl xlsxwriter xlrd

Escribiendo archivos de Excel usando Pandas {#escribiendo archivos de Excel usando pandas}

Estaremos almacenando la información que nos gustaría escribir en un archivo de Excel en un DataFrame. Usando la función integrada to_excel(), podemos extraer esta información en un archivo de Excel.

Primero, importemos el módulo Pandas:

1
import pandas as pd

Ahora, usemos dictionary para llenar DataFrame:

1
2
3
df = pd.DataFrame({'States':['California', 'Florida', 'Montana', 'Colorodo', 'Washington', 'Virginia'],
    'Capitals':['Sacramento', 'Tallahassee', 'Helena', 'Denver', 'Olympia', 'Richmond'],
    'Population':['508529', '193551', '32315', '619968', '52555', '227032']})

Las claves de nuestro diccionario servirán como nombres de columna. De manera similar, los valores se convierten en las filas que contienen la información.

Ahora, podemos usar la función to_excel() para escribir el contenido en un archivo. El único argumento es la ruta del archivo:

1
df.to_excel('./states.xlsx')

Aquí está el archivo de Excel que se creó:

states spreadsheet

Tenga en cuenta que no estamos utilizando ningún parámetro en nuestro ejemplo. Por lo tanto, la hoja dentro del archivo conserva su nombre predeterminado: "Hoja 1". Como puede ver, nuestro archivo de Excel tiene una columna adicional que contiene números. Estos números son los índices para cada fila, que provienen directamente del DataFrame de Pandas.

Podemos cambiar el nombre de nuestra hoja agregando el parámetro sheet_name a nuestra llamada to_excel():

1
df.to_excel('./states.xlsx', sheet_name='States')

De manera similar, agregar el parámetro index y establecerlo en False eliminará la columna de índice de la salida:

1
df.to_excel('./states.xlsx', sheet_name='States', index=False)

Ahora, el archivo de Excel se ve así:

states spreadsheet without index

Escritura de varios marcos de datos en un archivo de Excel {#escritura de varios marcos de datos en un archivo de Excel}

También es posible escribir múltiples marcos de datos en un archivo de Excel. Si lo desea, también puede configurar una hoja diferente para cada marco de datos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
income1 = pd.DataFrame({'Names': ['Stephen', 'Camilla', 'Tom'],
                   'Salary':[100000, 70000, 60000]})

income2 = pd.DataFrame({'Names': ['Pete', 'April', 'Marty'],
                   'Salary':[120000, 110000, 50000]})

income3 = pd.DataFrame({'Names': ['Victor', 'Victoria', 'Jennifer'],
                   'Salary':[75000, 90000, 40000]})

income_sheets = {'Group1': income1, 'Group2': income2, 'Group3': income3}
writer = pd.ExcelWriter('./income.xlsx', engine='xlsxwriter')

for sheet_name in income_sheets.keys():
    income_sheets[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)

writer.save()

Aquí, hemos creado 3 marcos de datos diferentes que contienen varios nombres de empleados y sus salarios como datos. Cada uno de estos marcos de datos se rellena con su diccionario respectivo.

Hemos combinado estos tres dentro de la variable income_sheets, donde cada clave es el nombre de la hoja, y cada valor es el objeto DataFrame.

Finalmente, hemos usado el motor xlsxwriter para crear un objeto writer. Este objeto se pasa a la llamada de función to_excel().

Antes incluso de escribir algo, recorremos las claves de ingresos y para cada clave, escribimos el contenido en el nombre de la hoja respectiva.

Aquí está el archivo generado:

multi-sheet excel file

Puede ver que el archivo de Excel tiene tres hojas diferentes denominadas Grupo1, Grupo2 y Grupo3. Cada una de estas hojas contiene los nombres de los empleados y sus salarios con respecto a la fecha en los tres marcos de datos diferentes de nuestro código.

El parámetro del motor en la función to_excel() se usa para especificar qué módulo subyacente usa la biblioteca de Pandas para crear el archivo de Excel. En nuestro caso, el módulo xlsxwriter se usa como motor para la clase ExcelWriter. Se pueden especificar diferentes motores dependiendo de sus respectivas características.

Dependiendo de los módulos de Python instalados en su sistema, las otras opciones para el atributo del motor son: openpyxl (para xlsx y xlsm) y xlwt (para xls).

Más detalles sobre el uso del módulo xlsxwriter con la biblioteca Pandas están disponibles en [la documentación oficial] (https://xlsxwriter.readthedocs.io/working_with_pandas.html).

Por último, pero no menos importante, en el código anterior tenemos que guardar explícitamente el archivo usando writer.save(), de lo contrario, no se conservará en el disco.

Leer archivos de Excel con Pandas

A diferencia de escribir objetos DataFrame en un archivo de Excel, podemos hacer lo contrario leyendo archivos de Excel en DataFrames. Empaquetar el contenido de un archivo de Excel en un DataFrame es tan fácil como llamar a la función read_excel():

1
2
students_grades = pd.read_excel('./grades.xlsx')
students_grades.head()

Para este ejemplo, estamos leyendo [este archivo de Excel](https://wikihtp.s3.amazonaws.com/files/reading-and-write-excel-files-in-python-with-pandas-grades. xlsx).

Aquí, el único argumento requerido es la ruta al archivo de Excel. Los contenidos se leen y empaquetan en un DataFrame, que luego podemos previsualizar a través de la función head().

Nota: El uso de este método, aunque es el más simple, solo leerá la primera hoja.

Echemos un vistazo a la salida de la función head():

grades dataframe

Pandas asigna una etiqueta de fila o un índice numérico al DataFrame de forma predeterminada cuando usamos la función read_excel().

Podemos anular el índice predeterminado pasando una de las columnas en el archivo de Excel como el parámetro index_col:

1
2
students_grades = pd.read_excel('./grades.xlsx', sheet_name='Grades', index_col='Grade')
students_grades.head()

Ejecutar este código dará como resultado:

grades index

En el ejemplo anterior, hemos reemplazado el índice predeterminado con la columna "Calificación" del archivo de Excel. Sin embargo, solo debe anular el índice predeterminado si tiene una columna con valores que podrían servir como un mejor índice.

Lectura de columnas específicas de un archivo de Excel {#lectura de columnas específicas de un archivo de Excel}

Leer un archivo en su totalidad es útil, aunque en muchos casos, realmente querrás acceder a un elemento determinado. Por ejemplo, es posible que desee leer el valor del elemento y asignarlo a un campo de un objeto.

De nuevo, esto se hace usando la función read_excel(), sin embargo, pasaremos el parámetro usecols. Por ejemplo, podemos limitar la función para leer solo ciertas columnas. Agreguemos el parámetro para que leamos las columnas que corresponden a los valores "Nombre del estudiante", "Grado" y "Marcas obtenidas".

Hacemos esto especificando el índice numérico de cada columna:

1
2
3
4
cols = [0, 1, 3]

students_grades = pd.read_excel('./grades.xlsx', usecols=cols)
students_grades.head()

Ejecutar este código producirá:

dataframe usecols

Como puede ver, solo estamos recuperando las columnas especificadas en la lista cols.

Conclusión

Hemos cubierto algunos usos generales de las funciones read_excel() y to_excel() de la biblioteca Pandas. Con ellos, hemos leído archivos de Excel existentes y escrito nuestros propios datos en ellos.

Usando varios parámetros, podemos alterar el comportamiento de estas funciones, permitiéndonos crear archivos personalizados, en lugar de simplemente volcar todo desde un DataFrame.