Estoy iterando sobre un marco de datos de pandas durante y realizo una operación para obtener la información (número de hoja de Excel) para guardar la hoja de Excel apropiada como esta:
from opnepyxl.utils.dataframe import dataframe_to_rows for i,data in df.iterows: sheet=data['SheetNo'] #Create excel writer writer=pd.Excelwriter('output.xlxs') # write dataframe to excelsheet data.to_excel(writer, sheet) #save the excel file writer.save()Marco de datos:
ID SheetNo setting 2304 2 IGV5 2305 3 IGV2 2306 1 IGV6 2307 2 IGV2 2308 1 IGV1Lo que quería era que los datos entraran en cada uno de los 'Número de hoja' creados del archivo de Excel, en cambio, la hoja anterior se sobrescribe con la siguiente, y solo puede ver el último número de hoja.
¿Qué puedo hacer para que este código funcione? Cualquier otro enfoque aparte del mío anterior será bienvenido.
el código de python está debajo. Tenga en cuenta que:
output.xlsx en el mismo directorio que ejecuta este códigoSheetNo . Si no está disponible en el archivo, creará una nueva hoja de trabajo/pestaña con ese nombre y agregará la fila de encabezado 3. El programa luego agregará cada fila (adjuntará) a la hoja import pandas as pd from openpyxl import load_workbook data = {'ID': [2304,2305,2306,2307,2308], 'SheetNo': [2,3,1,2,1], 'setting': ['IGV5', 'IGV2', 'IGV6', 'IGV2', 'IGV1']} df = pd.DataFrame(data) headers = ['ID','SheetNo','setting'] FilePath = 'output.xlsx' #ASSUMPTON - File already exists wb = load_workbook(FilePath) for sheet in df.SheetNo.unique(): if str(sheet) in wb.sheetnames: #If sheet in excel file ws = wb[str(sheet)] else: ws = wb.create_sheet(title=str(sheet)) #Create New sheet is not present ws.append(headers) #New sheet = Need header, else not required i =0 j = 0 for row in ws.iter_rows(min_row=ws.max_row+1, max_row=ws.max_row+len(df[df.SheetNo == sheet]), min_col=1, max_col=3): for cell in row: cell.value = df[df.SheetNo == sheet].iloc[i,j] j = j + 1 j=0 i= i + 1 wb.save('output.xlsx')Salida de Excel después de una ejecución del código