Operaciones de archivos Excel con Pandas

Pandas ofrece completas funciones de manejo de archivos Excel, ayudándonos a leer y escribir fácilmente.xlsy.xlsxarchivos, con soporte para operaciones complejas como múltiples hojas, índices, selección de columnas, etc. Es una herramienta imprescindible en el análisis de datos.

Operación Método Descripción
Leer archivo Excel pd.read_excel() Lee un archivo Excel y devuelve un DataFrame
Escribir DataFrame en Excel DataFrame.to_excel() Escribir DataFrame en un archivo Excel
Cargar archivo Excel pd.ExcelFile() Cargar archivo Excel y acceder a múltiples hojas
Usar ExcelWriter para escribir múltiples hojas pd.ExcelWriter() Escribir múltiples DataFrames en diferentes hojas del mismo archivo Excel

pd.read_excel() - 读取 Excel 文件

pd.read_excel()El método se utiliza para leer datos de un archivo Excel y cargarlos como DataFrame. Admite la lectura de.xlsy.xlsxarchivos en formato.

La sintaxis es la siguiente:

pandas.read_excel(io, sheet_name=0, *, header=0, names=None, index_col=None, usecols=None, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_parser=<no_default>, date_format=None, thousands=None, decimal='.', comment=None, skipfooter=0, storage_options=None, dtype_backend=<no_default>, engine_kwargs=None)

Descripción de parámetros:

  • ioParámetro obligatorio que especifica la ruta del archivo Excel a leer o un objeto de archivo.

  • sheet_name=0Especifica el nombre o índice de la hoja de trabajo a leer. El valor predeterminado es 0, es decir, la primera hoja.

  • header=0Especifica la fila que se usará como nombre de las columnas. El valor predeterminado es 0, es decir, la primera fila.

  • names=NoneLista para especificar los nombres de las columnas. Si se proporciona, reemplaza los nombres de columna del archivo.

  • index_col=NoneEspecifica la columna que se usará como índice de filas. Puede ser el nombre de la columna o un número.

  • usecols=NoneEspecifica las columnas a leer. Puede ser una lista de nombres de columna o una lista de índices de columna.

  • dtype=NoneEspecifica los tipos de datos de las columnas. Puede ser un diccionario con los nombres de columna como claves y los tipos de datos como valores.

  • engine=NoneEspecifica el motor de análisis. El valor predeterminado esNone, pandas lo selecciona automáticamente.

  • converters=NoneDiccionario de funciones para transformar datos.

  • true_values=NoneEspecifica que se debe considerar como booleanoTruelos valores.

  • false_values=NoneEspecifica que se debe considerar como booleanoFalselos valores.

  • skiprows=NoneEspecifica el número de filas a omitir o una lista de filas a omitir.

  • nrows=NoneEspecifica el número de filas a leer.

  • na_values=NoneEspecifica los valores que deben considerarse como valores faltantes.

  • keep_default_na=TrueEspecifica si los valores faltantes predeterminados (por ejemplo,NaN) se deben analizar comoNA。

  • na_filter=TrueEspecifica si los datos se deben convertir aNA。

  • verbose=FalseEspecifica si se debe mostrar información detallada de progreso.

  • parse_dates=FalseEspecifica si se deben analizar fechas.

  • date_parser=<no_default>Función para analizar fechas.

  • date_format=NoneEspecifica el formato de fecha.

  • thousands=NoneEspecifica el separador de miles.

  • decimal='.'Especifica el carácter decimal.

  • comment=NoneEspecifica el carácter de comentario.

  • skipfooter=0Especifica el número de líneas al final del archivo que se deben omitir.

  • storage_options=NoneDiccionario de parámetros para almacenamiento en la nube.

  • dtype_backend=<no_default>Especifica el backend de tipos de datos.

  • engine_kwargs=NoneDiccionario de parámetros adicionales para pasar al motor.

Este artículo usaejemplo_pandas_data.xlsxcomo ejemplo. Puedesdescargar ejemplo_pandas_data.xlsxpara probarlo.

Ejemplo

import pandas as pd

# Leer el archivo data.xlsx
df = pd.read_excel('ejemplo_pandas_data.xlsx')

# Imprimir el DataFrame leído
print(df)

El resultado es:

      表格 1 Unnamed: 1   Unnamed: 2
0     Name        Age         City
1    Alice         25     New York
2      Bob         30  Los Angeles
3  Charlie         35      Chicago

read_excel lee la primera hoja por defecto (sheet_name=0). Suponiendo que data.xlsx contenga una sola hoja, los datos leídos se almacenan en un DataFrame.

Si data.xlsx contiene varias hojas, puedes especificar sheet_name para leer los datos de una hoja en particular, por ejemplopd.read_excel('data.xlsx', sheet_name='Sheet1')。

Ejemplo

import pandas as pd

# Leer la primera hoja predeterminada
df = pd.read_excel('data.xlsx')
print(df)

# Leer el contenido de una hoja específica (nombre de la hoja)
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df)

# Leer varias hojas, devuelve un diccionario
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
print(dfs)

# Personalizar los nombres de columna y omitir las dos primeras filas
df = pd.read_excel('data.xlsx', header=None, names=['A', 'B', 'C'], skiprows=2)
print(df)

DataFrame.to_excel() - Escribir DataFrame en un archivo Excel

to_excel()El método se utiliza para escribir un DataFrame en un archivo Excel, admite.xlsy.xlsxformatos.

La sintaxis es la siguiente:

DataFrame.to_excel(excel_writer, *, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, inf_rep='inf', freeze_panes=None, storage_options=None, engine_kwargs=None)

Descripción de parámetros:

  • excel_writerParámetro obligatorio que especifica la ruta del archivo Excel a escribir o un objeto de archivo.

  • sheet_name='Sheet1'Especifica el nombre de la hoja de trabajo, el valor predeterminado es'Sheet1'。

  • na_rep=''Especifica la cadena que representa valores faltantes (NaN) en el archivo Excel. El valor predeterminado es una cadena vacía.

  • float_format=NoneEspecifica el formato de los números de punto flotante. Si esNone, se usa el formato predeterminado de Excel.

  • columns=NoneEspecifica las columnas a escribir. Si esNone, se escriben todas las columnas.

  • header=TrueEspecifica si se escribe el nombre de las columnas como primera fila. Si esFalse, no se escriben los nombres de columna.

  • index=TrueEspecifica si se escribe el índice como primera columna. Si esFalse, no se escribe el índice.

  • index_label=NoneEspecifica la etiqueta de la columna de índice. Si esNone, no se escribe la etiqueta del índice.

  • startrow=0Especifica el número de fila donde se comienza a escribir; el valor predeterminado es la fila 0.

  • startcol=0Especifica el número de columna donde se comienza a escribir; el valor predeterminado es la columna 0.

  • engine=NoneEspecifica el motor utilizado al escribir el archivo Excel; el valor predeterminado esNone, pandas lo selecciona automáticamente.

  • merge_cells=TrueEspecifica si se deben fusionar celdas. Si esTrue, se fusionan las celdas con el mismo valor.

  • inf_rep='inf'Especifica la cadena que representa valores infinitos en el archivo Excel; el valor predeterminado es'inf'。

  • freeze_panes=NoneEspecifica la posición de los paneles congelados. Si esNone, no se congelan los paneles.

  • storage_options=NoneDiccionario de parámetros para almacenamiento en la nube.

  • engine_kwargs=NoneDiccionario de parámetros adicionales para pasar al motor.

Ejemplo

import pandas as pd

# Crear un DataFrame simple
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
})

# Escribir el DataFrame en un archivo Excel, en la hoja 'Sheet1'
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)

# Escribir múltiples hojas usando ExcelWriter
with pd.ExcelWriter('output.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
df.to_excel(writer, sheet_name='Sheet2', index=False)

ExcelFile - Cargar un archivo Excel

ExcelFileEs una clase para leer archivos Excel, puede manejar múltiples hojas y acceder a sus datos sin volver a abrir el archivo.

La sintaxis es la siguiente:

excel_file = pd.ExcelFile('data.xlsx')

Métodos comunes:

Método Descripción de función
sheet_names Devuelve una lista con los nombres de todas las hojas del archivo
parse(sheet_name) Analiza la hoja especificada y devuelve un DataFrame
close() Cierra el archivo para liberar recursos

Ejemplo

import pandas as pd

# Usar ExcelFile para cargar un archivo Excel
excel_file = pd.ExcelFile('data.xlsx')

# Ver los nombres de todas las hojas
print(excel_file.sheet_names)

# Leer la hoja especificada
df = excel_file.parse('Sheet1')
print(df)

# Cerrar el archivo
excel_file.close()

ExcelWriter - Escribir en un archivo Excel

ExcelWriter es una clase proporcionada por pandas para escribir objetos DataFrame o Series en un archivo Excel. Con ExcelWriter, puedes escribir varias hojas de trabajo en un solo archivo Excel y controlar el proceso de escritura con mayor flexibilidad.

La sintaxis es la siguiente:

pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', storage_options=None, if_sheet_exists=None, engine_kwargs=None)

Descripción de parámetros:

  • pathParámetro obligatorio que especifica la ruta, URL u objeto de archivo del archivo Excel a escribir. Puede ser una ruta de archivo local, una ruta de almacenamiento remoto (como S3), un enlace URL o un objeto de archivo ya abierto.。

  • engineEs un parámetro opcional que especifica el motor para escribir el archivo Excel. Si esNone, pandas selecciona automáticamente un motor disponible (por defecto se prefiereopenpyxl; si no está disponible, se elige otro motor). Los motores comunes incluyen'openpyxl'(para.xlsxarchivos),'xlsxwriter'(proporciona formato avanzado y funciones de gráficos),'odf'(para formatos OpenDocument como.ods) etc.。

  • date_formatEs un parámetro opcional que especifica la cadena de formato de fecha al escribir en el archivo Excel, por ejemplo"YYYY-MM-DD"。

  • datetime_format: Este es un parámetro opcional que especifica la cadena de formato para los objetos de fecha y hora escritos en el archivo de Excel, por ejemplo"YYYY-MM-DD HH:MM:SS"。

  • mode: Este es un parámetro opcional, cuyo valor predeterminado es'w', lo que indica el modo de escritura. Si se establece en'a', significa el modo de anexar, agregando datos a un archivo existente (solo se admite en algunos motores, comoopenpyxl)。

  • storage_options: Este es un parámetro opcional que se utiliza para especificar opciones adicionales para conectarse al backend de almacenamiento, como información de autenticación, permisos de acceso, etc., adecuado para escribir en almacenamiento remoto (por ejemplo, S3, GCS)。

  • if_sheet_exists: Este es un parámetro opcional, cuyo valor predeterminado es'error', especifica el comportamiento cuando la hoja de cálculo ya existe. Las opciones incluyen'error'(lanzar un error),'new'(crear una nueva hoja de cálculo),'replace'(reemplazar el contenido de la hoja de cálculo existente),'overlay'(sobrescribir en la hoja de cálculo existente)。

  • engine_kwargs: Este es un parámetro opcional que se utiliza para otros argumentos de palabra clave que se pasan al motor. Estos argumentos se pasan a la función del motor correspondiente, por ejemploxlsxwriter.Workbook(file, **engine_kwargs)oopenpyxl.Workbook(**engine_kwargs)esperar。

Crear un objeto ExcelWriter:

Ejemplo

with ExcelWriter('output.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1')

Aquí, ExcelWriter se usa como administrador de contexto para garantizar que el archivo se cierre correctamente después de la operación.

Escribir múltiples hojas de cálculo:

Puede usar el mismo objeto ExcelWriter para escribir diferentes DataFrames en diferentes hojas de cálculo del mismo archivo de Excel.

Ejemplo

df1 = pd.DataFrame([["AAA", "BBB"]], columns=["Spam", "Egg"])  
df2 = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])  
with pd.ExcelWriter("path_to_file.xlsx") as writer:
    df1.to_excel(writer, sheet_name="Sheet1")  
    df2.to_excel(writer, sheet_name="Sheet2")

Establecer el formato de fecha o el formato de fecha y hora:

Ejemplo

from datetime import date, datetime  
df = pd.DataFrame(
    [
        [date(2014, 1, 31), date(1999, 9, 24)],
        [datetime(1998, 5, 26, 23, 33, 4), datetime(2014, 2, 28, 13, 5, 13)],
    ],
    index=["Date", "Datetime"],
    columns=["X", "Y"],
)  
with pd.ExcelWriter(
    "path_to_file.xlsx",
    date_format="YYYY-MM-DD",
    datetime_format="YYYY-MM-DD HH:MM:SS"
) as writer:
    df.to_excel(writer)

Anexar contenido a un archivo de Excel existente:

Ejemplo

with pd.ExcelWriter("path_to_file.xlsx", mode="a", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="Sheet3")

Usar el parámetro if_sheet_exists para reemplazar una hoja de cálculo existente:

Ejemplo

with ExcelWriter(
    "path_to_file.xlsx",
    mode="a",
    engine="openpyxl",
    if_sheet_exists="replace",
) as writer:
    df.to_excel(writer, sheet_name="Sheet1")

Escribir múltiples DataFrames en la misma hoja de cálculo, tenga en cuenta que el parámetro if_sheet_exists debe establecerse en overlay:

Ejemplo

with ExcelWriter("path_to_file.xlsx",
    mode="a",
    engine="openpyxl",
    if_sheet_exists="overlay",
) as writer:
    df1.to_excel(writer, sheet_name="Sheet1")
    df2.to_excel(writer, sheet_name="Sheet1", startcol=3)

Almacenar el archivo de Excel en memoria:

Ejemplo

import io
df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])
buffer = io.BytesIO()
with pd.ExcelWriter(buffer) as writer:
    df.to_excel(writer)

Empaquetar el archivo de Excel en un archivo comprimido zip:

Ejemplo

import zipfile  
df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])  
with zipfile.ZipFile("path_to_file.zip", "w") as zf:
    with zf.open("filename.xlsx", "w") as buffer:
        with pd.ExcelWriter(buffer) as writer:
            df.to_excel(writer)

Pasar argumentos adicionales al motor subyacente:

Ejemplo

with pd.ExcelWriter(
    "path_to_file.xlsx",
    engine="xlsxwriter",
    engine_kwargs={"options": {"nan_inf_to_errors": True}}
) as writer:
    df.to_excel(writer)

En el modo de anexar, engine_kwargs se pasa a load_workbook de openpyxl:

Ejemplo

with pd.ExcelWriter(
    "path_to_file.xlsx",
    engine="openpyxl",
    mode="a",
    engine_kwargs={"keep_vba": True}
) as writer:
    df.to_excel(writer, sheet_name="Sheet2")
Otras extensiones