exportar excelwriter data con python pandas openpyxl xlsxwriter

python - excelwriter - ¿Cómo guardar una nueva hoja en un archivo excel existente, usando Pandas?



exportar a excel con pandas (4)

En el ejemplo que compartió, está cargando el archivo existente en el book y configurando el valor de writer.book como book . En la línea writer.sheets = dict((ws.title, ws) for ws in book.worksheets) está accediendo a cada hoja del libro de trabajo como ws . El título de la hoja es entonces ws por lo que está creando un diccionario de {sheet_titles: sheet} , pares de valores. Este diccionario luego se establece en writer.sheets. Esencialmente, estos pasos son simplemente cargar los datos existentes de ''Masterfile.xlsx'' y ''Masterfile.xlsx'' su escritor con ellos.

Ahora digamos que ya tiene un archivo con x1 y x2 como hojas. Puede usar el código de ejemplo para cargar el archivo y luego podría hacer algo como esto para agregar x3 y x4 .

path = r"C:/Users/fedel/Desktop/excelData/PhD_data.xlsx" writer = pd.ExcelWriter(path, engine=''openpyxl'') df3.to_excel(writer, ''x3'', index=False) df4.to_excel(writer, ''x4'', index=False) writer.save()

Eso debería hacer lo que buscas.

Quiero usar archivos de Excel para almacenar datos elaborados con Python. Mi problema es que no puedo agregar hojas a un archivo de Excel existente. Aquí sugiero un código de ejemplo para trabajar con el fin de llegar a este problema

import pandas as pd import numpy as np path = r"C:/Users/fedel/Desktop/excelData/PhD_data.xlsx" x1 = np.random.randn(100, 2) df1 = pd.DataFrame(x1) x2 = np.random.randn(100, 2) df2 = pd.DataFrame(x2) writer = pd.ExcelWriter(path, engine = ''xlsxwriter'') df1.to_excel(writer, sheet_name = ''x1'') df2.to_excel(writer, sheet_name = ''x2'') writer.save() writer.close()

Este código guarda dos DataFrames en dos hojas, llamadas "x1" y "x2" respectivamente. Si creo dos nuevos DataFrames e intento usar el mismo código para agregar dos nuevas hojas, ''x3'' y ''x4'', los datos originales se pierden.

import pandas as pd import numpy as np path = r"C:/Users/fedel/Desktop/excelData/PhD_data.xlsx" x3 = np.random.randn(100, 2) df3 = pd.DataFrame(x3) x4 = np.random.randn(100, 2) df4 = pd.DataFrame(x4) writer = pd.ExcelWriter(path, engine = ''xlsxwriter'') df3.to_excel(writer, sheet_name = ''x3'') df4.to_excel(writer, sheet_name = ''x4'') writer.save() writer.close()

Quiero un archivo de Excel con cuatro hojas: ''x1'', ''x2'', ''x3'', ''x4''. Sé que ''xlsxwriter'' no es el único "motor", hay ''openpyxl''. También vi que ya hay otras personas que han escrito sobre este tema, pero todavía no puedo entender cómo hacerlo.

Aquí un código tomado de este link

import pandas from openpyxl import load_workbook book = load_workbook(''Masterfile.xlsx'') writer = pandas.ExcelWriter(''Masterfile.xlsx'', engine=''openpyxl'') writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) data_filtered.to_excel(writer, "Main", cols=[''Diff1'', ''Diff2'']) writer.save()

Dicen que funciona, pero es difícil averiguar cómo. No entiendo qué "ws.title", "ws" y "dict" están en este contexto.

¿Cuál es la mejor manera de guardar "x1" y "x2", luego cierre el archivo, ábralo nuevamente y agregue "x3" y "x4"?


Gracias. Creo que un ejemplo completo podría ser bueno para cualquier otra persona que tenga algún problema:

import pandas as pd import numpy as np path = r"C:/Users/fedel/Desktop/excelData/PhD_data.xlsx" x1 = np.random.randn(100, 2) df1 = pd.DataFrame(x1) x2 = np.random.randn(100, 2) df2 = pd.DataFrame(x2) writer = pd.ExcelWriter(path, engine = ''xlsxwriter'') df1.to_excel(writer, sheet_name = ''x1'') df2.to_excel(writer, sheet_name = ''x2'') writer.save() writer.close()

Aquí genero un archivo de Excel, según tengo entendido, en realidad no importa si se genera mediante el motor "xslxwriter" o el motor "openpyxl".

Cuando quiero escribir sin perder los datos originales entonces

import pandas as pd import numpy as np from openpyxl import load_workbook path = r"C:/Users/fedel/Desktop/excelData/PhD_data.xlsx" book = load_workbook(path) writer = pd.ExcelWriter(path, engine = ''openpyxl'') writer.book = book x3 = np.random.randn(100, 2) df3 = pd.DataFrame(x3) x4 = np.random.randn(100, 2) df4 = pd.DataFrame(x4) df3.to_excel(writer, sheet_name = ''x3'') df4.to_excel(writer, sheet_name = ''x4'') writer.save() writer.close()

Este código hace el trabajo!



Un ejemplo simple para escribir datos múltiples para sobresalir a la vez. Y también cuando desee adjuntar datos a una hoja en un archivo Excel escrito (archivo Excel cerrado).

Cuando es la primera vez que escribes para sobresalir. (Escribiendo "df1" y "df2" a "1st_sheet" y "2nd_sheet")

import pandas as pd from openpyxl import load_workbook df1 = pd.DataFrame([[1],[1]], columns=[''a'']) df2 = pd.DataFrame([[2],[2]], columns=[''b'']) df3 = pd.DataFrame([[3],[3]], columns=[''c'']) excel_dir = "my/excel/dir" with pd.ExcelWriter(excel_dir, engine=''xlsxwriter'') as writer: df1.to_excel(writer, ''1st_sheet'') df2.to_excel(writer, ''2nd_sheet'') writer.save()

Después de cerrar su Excel, pero desea "agregar" datos en el mismo archivo de Excel pero en otra hoja, digamos "df3" al nombre de la hoja "3rd_sheet".

book = load_workbook(excel_dir) with pd.ExcelWriter(excel_dir, engine=''openpyxl'') as writer: writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) ## Your dataframe to append. df3.to_excel(writer, ''3rd_sheet'') writer.save()

Tenga en cuenta que el formato de Excel no debe ser xls, puede usar xlsx one.