Hallo,
ich bin Student (kein Informatik) und weitgehend unerfahren... deshalb komme ich leider nicht weiter beim Schreiben meines Programms.
Problem:
Ich möchte mithilfe von Pandas eingegebene Listen in Excel exportieren, sodass Liste 1 z.B. in Spalte 1 gelistet ist, Liste 2 in Spalte 2 usw.
Das Problem beim Export ist, dass immer nur die letzten Werte der Listen (s.u.), die eingegeben werden, in der ersten Zeile in Excel angezeigt werden und nicht alle Werte untereinander.
Wie könnte man das umsetzten? / Welchen Befehl gibt es da? (Mir ist bewusst, dass ich in Einzelfällen Zellen anwählen kann, in die Werte geschrieben werden sollen, aber da ich mit einer For-Schleife arbeite(n muss), komme ich nicht weiter.)
Mein Programm(abschnitt) sieht etwa so aus:
[...]
for i in range(len(obstsorten)):
print("#" + str(i + 1), "Sorten: " + obstsorten + " Gewicht: " +gewicht + " Anzahl: " + zahl + " Preis: " +preis +"€")
abc = pandas.DataFrame({'Sorte': [obstsorten],
'Gewicht': [gewicht],
'Anzahl': [zahl],
'Preis': [preis]})
writer = pandas.ExcelWriter('Datei_neu.xlsx', engine='xlsxwriter')
abc.to_excel(writer, sheet_name='Obstsalat', index=False)
writer.save()
--> die Zeile nach der For-Schleife funktioniert, sprich die Anzeige in Python
Vielen Dank im Voraus.
Grüße
cheron
Pandas: Excel mit Daten befüllen
- __blackjack__
- User
- Beiträge: 13080
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@cheron173: In der Python-Dokumentation gibt es ein Tutorial mit Grundlagen, das man mal durchgearbeitet haben sollte, und Pandas hat auch eine ganz gute Dokumentation.
Du hast Code geschrieben der genau das macht/als Ergebnis hat was Du da beschreibst. Warum hast Du etwas anderes erwartet? Dein `abc` (schlechter Name) enthält halt immer nur einen Datensatz. `to_excel()` schreibt den Frame, also den einen Datensatz in die Datei. Und die Datei wird immer überschrieben, darum steht da am Ende der letzte Datensatz drin.
Wenn Du die Pandas-Grundlagen durchgearbeitet hast, dann wirst Du sehen warum Du gar keine ``for``-Schleife brauchst.
Apropos ``for``-Schleife: ein ``for i in len(sequence):`` nur um `i` dann als Index in `sequence` zu verwenden ist in Python ein „anti pattern“. Das macht man nicht, weil man direkt über die Elemente von Sequenzen iterieren kann, ohne den Umweg über einen Index. Wenn man über mehrere Sequenzen ”parallel” iterieren möchte, dann gibt es dafür die `zip()`-Funktion. Aber wie gesagt, der Ansatz da selbst eine Schleife schreiben zu wollen ist schon falsch. Benutze Pandas.
Du hast Code geschrieben der genau das macht/als Ergebnis hat was Du da beschreibst. Warum hast Du etwas anderes erwartet? Dein `abc` (schlechter Name) enthält halt immer nur einen Datensatz. `to_excel()` schreibt den Frame, also den einen Datensatz in die Datei. Und die Datei wird immer überschrieben, darum steht da am Ende der letzte Datensatz drin.
Wenn Du die Pandas-Grundlagen durchgearbeitet hast, dann wirst Du sehen warum Du gar keine ``for``-Schleife brauchst.
Apropos ``for``-Schleife: ein ``for i in len(sequence):`` nur um `i` dann als Index in `sequence` zu verwenden ist in Python ein „anti pattern“. Das macht man nicht, weil man direkt über die Elemente von Sequenzen iterieren kann, ohne den Umweg über einen Index. Wenn man über mehrere Sequenzen ”parallel” iterieren möchte, dann gibt es dafür die `zip()`-Funktion. Aber wie gesagt, der Ansatz da selbst eine Schleife schreiben zu wollen ist schon falsch. Benutze Pandas.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman