usar tutorial tablas recorrer promedio para leer funciones filtrar español datos data como columna biblioteca agregar python excel pandas dataframe xlsxwriter

python - tutorial - Poniendo muchos marcos de datos de pandas de pitón en una hoja de cálculo de Excel



promedio pandas python (3)

Me inclinaría más a concatenar los marcos de datos primero y luego convertir ese marco de datos en un formato de Excel. Para juntar dos marcos de datos uno al lado del otro (en lugar de uno encima del otro) haga esto:

writer = pd.ExcelWriter(''test.xlsx'',engine=''xlsxwriter'') # Creating Excel Writer Object from Pandas workbook=writer.book df.to_excel(writer,sheet_name=''Validation'',startrow=0 , startcol=0) new_df = pd.concat([df, another_df], axis=1) new_df.to_excel(writer,sheet_name=''Validation'',startrow=0 , startcol=0)

Es bastante fácil agregar muchos marcos de datos de pandas en el libro de trabajo de Excel, siempre que se trate de diferentes hojas de trabajo. Sin embargo, es algo complicado obtener muchos dataframes en una hoja de trabajo si desea usar la funcionalidad panda integrada df.to_excel.

# Creating Excel Writer Object from Pandas writer = pd.ExcelWriter(''test.xlsx'',engine=''xlsxwriter'') workbook=writer.book worksheet=workbook.add_worksheet(''Validation'') df.to_excel(writer,sheet_name=''Validation'',startrow=0 , startcol=0) another_df.to_excel(writer,sheet_name=''Validation'',startrow=20, startcol=0)

El código anterior no funcionará. Obtendrás el error de

Sheetname ''Validation'', with case ignored, is already in use.

Ahora, he experimentado lo suficiente como para encontrar una forma de hacerlo funcionar.

writer = pd.ExcelWriter(''test.xlsx'',engine=''xlsxwriter'') # Creating Excel Writer Object from Pandas workbook=writer.book df.to_excel(writer,sheet_name=''Validation'',startrow=0 , startcol=0) another_df.to_excel(writer,sheet_name=''Validation'',startrow=20, startcol=0)

Esto funcionará Por lo tanto, mi propósito de publicar esta pregunta en stackoverflow es doble. En primer lugar, espero que esto ayude a alguien si está tratando de poner muchos dataframes en una sola hoja de trabajo en Excel.

En segundo lugar, ¿alguien puede ayudarme a entender la diferencia entre esos dos bloques de código? Me parece que son prácticamente iguales, excepto que el primer bloque de código creó una hoja de trabajo llamada "Validación" por adelantado, mientras que el segundo no. Yo entiendo esa parte.

Lo que no entiendo es por qué debería ser diferente? Incluso si no creo la hoja de cálculo de antemano, esta línea, la línea justo antes de la última,

df.to_excel(writer,sheet_name=''Validation'',startrow=0 , startcol=0)

creará una hoja de trabajo de todos modos. En consecuencia, cuando llegamos a la última línea de código, ya se creó la hoja de trabajo "Validación" en el segundo bloque de código. Entonces, mi pregunta básicamente, ¿por qué debería funcionar el segundo bloque de código mientras que el primero no?

¡Por favor también comparta si hay otra manera de poner muchos dataframes en Excel usando la funcionalidad integrada df.to_excel!


user3817518: "¡Por favor también comparta si hay otra manera de poner muchos dataframes en Excel usando la funcionalidad integrada df.to_excel!"

Aquí está mi intento:

Una manera fácil de juntar muchos dataframes en una sola hoja o en varias pestañas. ¡Hazme saber si esto funciona!

- Para probar, simplemente ejecute los marcos de datos de muestra y la segunda y tercera parte del código.

Marcos de datos de muestra

import pandas as pd import numpy as np # Sample dataframes randn = np.random.randn df = pd.DataFrame(randn(15, 20)) df1 = pd.DataFrame(randn(10, 5)) df2 = pd.DataFrame(randn(5, 10))

Pon múltiples dataframes en una sola hoja xlsx

# funtion def multiple_dfs(df_list, sheets, file_name, spaces): writer = pd.ExcelWriter(file_name,engine=''xlsxwriter'') row = 0 for dataframe in df_list: dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0) row = row + len(dataframe.index) + spaces + 1 writer.save() # list of dataframes dfs = [df,df1,df2] # run function multiple_dfs(dfs, ''Validation'', ''test1.xlsx'', 1)

Pon múltiples marcos de datos en pestañas / hojas separadas

# function def dfs_tabs(df_list, sheet_list, file_name): writer = pd.ExcelWriter(file_name,engine=''xlsxwriter'') for dataframe, sheet in zip(df_list, sheet_list): dataframe.to_excel(writer, sheet_name=sheet, startrow=0 , startcol=0) writer.save() # list of dataframes and sheet names dfs = [df, df1, df2] sheets = [''df'',''df1'',''df2''] # run function dfs_tabs(dfs, sheets, ''multi-test.xlsx'')


Para crear la hoja de trabajo por adelantado, debe agregar la hoja creada al dict de sheets :

writer.sheets[''Validation''] = worksheet

Usando tu código original:

# Creating Excel Writer Object from Pandas writer = pd.ExcelWriter(''test.xlsx'',engine=''xlsxwriter'') workbook=writer.book worksheet=workbook.add_worksheet(''Validation'') writer.sheets[''Validation''] = worksheet df.to_excel(writer,sheet_name=''Validation'',startrow=0 , startcol=0) another_df.to_excel(writer,sheet_name=''Validation'',startrow=20, startcol=0)

Explicación

Si observamos la función to_excel , utiliza la función to_excel del escritor:

excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)

Entonces, mirando la función xlsxwriter para xlsxwriter :

def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0): # Write the frame cells using xlsxwriter. sheet_name = self._get_sheet_name(sheet_name) if sheet_name in self.sheets: wks = self.sheets[sheet_name] else: wks = self.book.add_worksheet(sheet_name) self.sheets[sheet_name] = wks

Aquí podemos ver que comprueba el nombre de la sheet_name en self.sheets , por lo que debe agregarse allí también.