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!
Le recomendaría encarecidamente que trabaje directamente con openpyxl ya que ahora admite Pandas DataFrames .
Esto le permite concentrarse en el código relevante de Excel y Pandas.
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.