Python-Praxis: Excel-Daten nutzen
Seite 2: Mit pandas in ein Excel-Arbeitsblatt schreiben
Zu diesem Zweck stellt die pandas-Bibliothek die DataFrame-Methode to_excel()
zur Verfügung. Die folgende Anweisung erstellt in der Arbeitsmappe Demo1.xlsx ein Arbeitsblatt mit dem Namen Umsätze 2. Quartal 2023 und schreibt in dieses die in dem zuvor erstellten DataFrame (siehe vorhergehendes Listing) gespeicherten Daten.
data_frame.to_excel('Demo1.xlsx', sheet_name='Umsätze 2. Quartal 2023', index=False)
Zu beachten ist, dass die Ziel-Arbeitsmappe bereits vorhanden sein muss und dass to_excel()
einen bestehenden Inhalt dort überschreibt. Die Angabe index=False
verhindert, dass die im DataFrame gespeicherten Datenzeilen-Indizes mitgeschrieben werden; die Standardeinstellung ist True
.
Zwei weitere Parameter der to_excel()
-Methode sind columns
und startcol
. columns
ist das Gegenstück zum read_excel()
-Parameter usecols
. Falls Developer nicht bereits beim Einlesen der Excel-Daten in den DataFrame eine Vorauswahl getroffen haben, können sie usecols
eine Liste mit den gewünschten Spalten zuweisen. Wenn die Spalten nebeneinanderliegen, bietet sich alternativ der Parameter startcol
an. Der Integerwert legt die Spalte fest, ab der to_excel()
in die Excel-Tabelle schreibt. Der Parameter startrow
verhält sich analog und legt die erste Datenzeile fest. Um die Spaltennamen neu festzulegen, übergibt man dem header
-Parameter eine Liste mit den gewünschten neuen Namen. Mit der Angabe header=False
schreibt to_excel()
die Daten ohne Spaltenüberschriften in die Excel-Tabelle.
Einen DataFrame erstellen
Wollen Entwicklerinnen und Entwickler berechnete Daten in eine Arbeitsmappe schreiben, müssen sie zuvor einen eigenen DataFrame erstellen. Dafür gibt es mehrere Wege, zum Beispiel übergibt man der __init__()
-Methode der DataFrame-Klasse die gewünschten Daten. Der columns
-Parameter definiert dabei die Spaltennamen. Die folgende Anweisung speichert im DataFrame die Umsätze der Bezirke A und B des ersten Halbjahrs (I. Quartal und II. Quartal).
data_frame = pandas.DataFrame([['Bezirk A', 19500, 13500], ['Bezirk B', 18400, 25100]], columns=['', 'I. Quartal', 'II. Quartal'])
Oder Developer speichern die Daten zunächst in einem Dictionary und übergeben dieses anschließend der __init__()
-Methode. In diesem Fall bezieht __init__()
- die Spaltennamen für den DataFrame aus den Schlüsseln und die Daten aus den Werten der Dictionary-Elemente. Die folgenden Anweisungen erstellen einen DataFrame mit den Gesamtumsätzen pro Quartal und schreiben diese anschließend in ein Arbeitsblatt Gesamtumsätze 2023 der Arbeitsmappe Demo1.xlsx.
import pandas
data_frame = pandas.read_excel('Demo.xlsx')
summe_quartal1_2023 = data_frame['I. Quartal'].sum()
summe_quartal2_2023 = data_frame['II. Quartal'].sum()
summe_quartal3_2023 = data_frame['III. Quartal'].sum()
summe_quartal4_2023 = data_frame['IV. Quartal'].sum()
umsaetze_dic = {
'Umsatz 1. Quartal': [summe_quartal1_2023],
'Umsatz 2. Quartal': [summe_quartal2_2023],
'Umsatz 3. Quartal': [summe_quartal3_2023],
'Umsatz 4. Quartal': [summe_quartal4_2023]
}
data_frame_umsaetze = pandas.DataFrame(umsaetze_dic)
data_frame_umsaetze.to_excel('Demo1.xlsx', sheet_name='Gesamtumsätze 2023', index=False)
Die Werte im Dictionary umsaetze_dic
sind, obwohl einelementig, als Liste angegeben, da die Länge der Werte im Dictionary übereinstimmen muss, wenn man ein Dictionary an die __init__()
-Methode übergibt. Das ist bei einfachen Werten wie hier bei den Umsätzen in der Regel nicht der Fall, da die Summen ja unterschiedliche Beträge ergeben.Es gibt noch eine Möglichkeit, den DataFrame zu erstellen, um auch einfache Werte im Dictionary zu notieren: from_dict()
wandelt ein Dictionary direkt in einen DataFrame um. Der Parameter orient
legt dabei fest, dass die Schlüssel des Dictionary, statt als Spaltenüberschriften als Index, also als Zeilenüberschriften des zu erstellenden DataFrame verwendet werden. Der obligatorische Parameter columns
enthält die gewünschten Spaltenüberschriften:
…
umsaetze_dic = {
'Umsatz 1. Quartal': summe_quartal1_2023,
'Umsatz 2. Quartal': summe_quartal2_2023,
'Umsatz 3. Quartal': summe_quartal3_2023,
'Umsatz 4. Quartal': summe_quartal4_2023
}
data_frame_umsaetze = pandas.DataFrame.from_dict(umsaetze_dic, orient='index', columns=['Summe'])
data_frame_umsaetze.to_excel('Demo1.xlsx', sheet_name='Gesamtumsätze 2023')
Die Daten werden dann in folgender Anordnung nach Excel geschrieben:
Summe
Umsatz 1. Quartal 63400
Umsatz 2. Quartal 73500
Umsatz 3. Quartal 77500
Umsatz 4. Quartal 84000
Die Angabe index=False
entfällt in dieser Variante beim Aufruf von to_excel()
, da die Indizes, die hier ja aus den Quartalsangaben bestehen, ausdrücklich geschrieben werden sollen.