2016-05-02 5 views
2

Versuchen, mich selbst zu programmieren, um einige mühsame Aufgaben bei der Arbeit zu automatisieren. Ich entschuldige mich für jede unbeabsichtigte Unwissenheit.Pandas: Iterate durch eine Liste von DataFrames und exportiere jedes in Excel-Tabellen

Ich habe Datenrahmen in Pandas (Python 3.x) erstellt. Ich möchte jeden Datenrahmen auf einem anderen Excel-Blatt drucken. Hier ist, was ich für 2 Datenrahmen habe, es funktioniert perfekt, aber ich möchte es skalieren, um eine Liste von Datenrahmen durchlaufen, so dass ich es ein bisschen dynamischer machen kann.

Einfach genug, aber wenn 50+ Blätter erstellt werden müssen, wird es mühsam.

Hier ist, was ich versucht, es hat nicht funktioniert:

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
List = [Data , ByBrand] 
for i in List: 
     i.to_excel(writer, sheet_name= i) 
writer.save() 

Ich denke, das Problem ist, dass die SHEET_NAME Feld ein String sein muss, weil, wie sie ist ein Fehler erzeugt. Aber wenn ich sheet_name = "i" lege, erzeugt es nur ein Blatt namens "i" mit den Daten von Data, aber nicht mit ByBrand. Außerdem wäre die Excel-Datei ein Albtraum, wenn die Blätter nicht zu ihrem entsprechenden Datenrahmen benannt würden, also bitte keine Vorschläge für Dinge wie nummerierte Blätter.

Vielen Dank im Voraus, diese Website war von unschätzbarem Wert für meine Reise in die Codierung.

-Stephen

Antwort

1

Es ist leichter, aus dem String 'Data' auf den Wert gehen Data als umgekehrt. Sie können locals()['Data'] verwenden Sie den Wert in die Variable, deren Zeichenfolge zugeordnet zuzugreifen Name ist 'Data':

import pandas as pd 

writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
seq = ['Data', 'ByBrand'] 
for name in seq: 
    df = locals()[name] 
    df.to_excel(writer, sheet_name=name) 
writer.save() 

locals() gibt einen Nur-Lese-Wörterbuch den aktuellen Bereich der lokalen Variablen enthält. globals() gibt ein Wörterbuch zurück, das die globalen Variablen des aktuellen Bereichs enthält. (Wenn also Data und ByBrand im globalen Namespace definiert sind und nicht dem lokale Namespace verwendet globals() statt locals().)


Eine weitere Möglichkeit ist es, den Datenrahmen in einem dict zu sammeln. Anstatt eine Variable für jeden Datenrahmen zu schaffen, machen ein dict, und lassen Sie die Schlüssel für die Blattnamen und die Werte Datenrahmen sein:

import pandas as pd 

dfs = dict() 
dfs['Data'] = ... 
dfs['ByBrand'] = ... 

writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
for name, df in dfs.items(): 
    df.to_excel(writer, sheet_name=name) 
writer.save() 

Ich denke, das bevorzugt ist, da es nicht Selbstbeobachtung Werkzeuge erfordert wie locals() oder globals() . Dieser zweite Ansatz verwendet nur ein Diktat, wie Dicts verwendet werden sollen: Zuordnen von Schlüsseln zu Werten.

Verwandte Themen