2017-07-16 5 views
0

Ich habe eine Reihe von 10 Pandas Datenrahmen mit jeweils 100 Zeilen und 6 Spalten. Ich versuche, openpyxl zu verwenden, um die Daten in xlsx zu schreiben. Jeder Datenrahmen sollte in einem separaten Arbeitsblatt der Arbeitsmappe enthalten sein. Die Blätter werden erstellt, aber alle Ergebnisse werden nur auf dem ersten Blatt eingegeben (also bekomme ich 10 Blatt, 9 leer und eins mit 1000 Zeilen - wenn ich 10 Blätter mit je 100 Reihen haben sollte). Wie kann ich das beheben? HierOPENPYXL bevölkern neue Arbeitsblätter

ist der Code für die ersten 2 Blätter:

from openpyxl import Workbook 

# Create the hospital_ranking workbook 
hospital_ranking = Workbook() 
dest_filename1 = "hospital_ranking.xlsx" 

ws1 = hospital_ranking.active 
ws1.title = "Nationwide" 

from openpyxl.utils.dataframe import dataframe_to_rows 

# Write the nationwide query to ws1 
for r in dataframe_to_rows(national_results, index = False, header = True): 
    ws1.append(r) 

for cell in ws1['A'] + ws1[1]: 
    cell.style = 'Pandas' 

# Create the worksheet for each focus state 

# CA 
ws2 = hospital_ranking.create_sheet(title = 'California') 
ws2 = hospital_ranking.active 


# Write the CA query to ws2 
for r in dataframe_to_rows(ca_results, index = False, header = True): 
    ws2.append(r) 

for cell in ws2['A'] + ws2[1]: 
    cell.style = 'Pandas' 

hospital_ranking.save(filename = os.path.join("staging/") + dest_filename1) 

Antwort

2

, nachdem Sie das Blatt erstellt, müssen Sie sich darauf beziehen: nicht ws2 auf die aktive Blatt der Arbeitsmappe erneut binden.

ws2 = hospital_ranking.active 

ist das gleiche wie:

ws2 = ws1 
+0

'code' WS2 = hospital_ranking.create_sheet (title = 'California') WS2 = hospital_ranking.get_sheet_by_name ('California') WS2 = hospital_ranking.active 'Code' produziert noch das gleiche Ergebnis – zsad512

+0

@ zsad512 - - einfach entfernen 'ws2 = hospital_ranking.active' es zeigt auf das aktive Blatt (die erste) – PRMoureu

1

Sie sind übermäßig Dinge zu komplizieren und nicht am dringendsten benötigen (wenn nicht alle) der Code, den Sie geschrieben. Verwenden Sie einfach df.to_excel, die ein sheet_name Argument akzeptiert.

import pandas as pd 

ew = pd.ExcelWriter('excel.xlsx') 

list_of_dfs = [df1, df2, df3] 
list_of_worksheet_names = [sheet1, sheet2, sheet3] 
for df, sheet_name in zip(list_of_dfs, list_of_worksheet_names): 
    df.to_excel(ew, sheet_name=sheet_name) 

ew.save() 
+0

Wie würde ich die resultierende Tabelle in das "Staging" -Verzeichnis schreiben? – zsad512

+0

und wie kann ich den Index ignorieren? – zsad512

+0

Ich würde dies als die Antwort akzeptieren, wenn ich diese beiden Fragen beantwortet bekommen könnte, da sie für meine Aufgabe absolut notwendig sind und der lange Weg sie bewerkstelligt – zsad512