In diesem Artikel möchte ich dir zeigen, wie du mit unterschiedlichen Paketen Excel Dateien bzw. Tabellen in Python einlesen kannst.
Manchmal kommt es vor, dass du keine CSV, JSON oder XML mit Daten bekommst die gut lesbar sind, sondern ein Excel Datei (XLSX). Diese sind leider nicht so einfach zu parsen wie eine CSV oder JSON mit internen Mitteln von Python selbst.
Es gibt verschiedene Python Module für das Arbeiten mit Excel Daten. Das bekannteste ist Pandas, ein Datenanalyse-Tool. Natürlich gibt es auch einzelne Module, die ausschließlich für die Arbeit mit Excel Dateien gedacht sind, wie zum Beispiel openpyxl.
Als Datensatz zum Testen habe ich mich für die "Vornamen 2019 mit Angaben der Rangfolge" in Düsseldorf entschieden. Ich habe die CSV als Excel Datei abgespeichert.
Vornamen | Open Data Düsseldorf
Falls du mit Excel Dateien zur Datenanalyse bzw. Data Science arbeiten willst, kann ich dir Jupyter Notebooks Empfehlen. Das ist eine interaktive Python Umgebung, in der du die Schritte deiner Arbeit einfacher nachvollziehen kannst und eine optisch angenehmere Ausgabe als in einer Terminal-Anwendung. Im Artikel "Wie Data Science funktioniert - Mit COVID-19 Daten!" gehe ich auf Jupyter Notebooks genauer ein.
Als Erstes schauen wir uns an, wie wir mit Pandas die Excel Dateien einlesen und dann als xlsx abspeichern können, nachdem wir diese z. B. manipuliert haben.
Die Installation von Pandas erfolgt über pip (Paketmanager) und der Paketname ist Pandas. Der Installations-Befehl sieht wie folgt aus:
pip install pandas
# oder
pip3 install pandas
(ob du pip
oder pip3
verwenden musst, kannst du über den Befehl pip show pip
erfahren)
Nachdem du Pandas installiert hast, kannst du mit dem Auslesen der Daten anfangen. Mit der Funktion read_excel
kannst du eine Excel Datei einlesen und via Pandas damit arbeiten. Dem Parameter index_col
übergeben wir den Wert 0, damit wir keine zusätzlichen Indizes angezeigt bekommen.
import pandas as pd
data = pd.read_excel('vornamen_2019_angabe_rangfolge.xlsx',index_col=0)
data.head()
Mit der Funktion head
bekommen wir standardmäßig die ersten 5 Zeilen des Dokuments. Diese ist hilfreich um zu sehen, ob die Daten korrekt eingelesen wurden.
Um unsere Excel Datei nach einer kleinen Manipulation wieder zu speichern, können wir die folgende Funktion verwenden. Als Manipulation reduzieren wir unseren Datensatz auf alle Zeilen mit dem Geschlecht "m" und sortieren diese anhand des Vornamen.
modified_dataframe = data.loc[data['geschlecht'] == "m"].sort_values('vorname')
Diesen Datensatz speichern wir jetzt wie folgt ab:
modified_dataframe.to_excel('vornamen_jungen_2019_angabe_rangfolge.xlsx')
Alternativ können wir den neu erzeugten Datensatz auch als neue Tabelle in der bereits vorhandenen Excel Datei abspeichern. Die Engine wird hier auf "openpyxl" gestellt, da der Standard in meinem Fall xlsxwriter war und dieser die Option nicht unterstützt neue Tabellen Blätter Anzulegen.
with pd.ExcelWriter('vornamen_2019_angabe_rangfolge.xlsx', mode='a', engine='openpyxl') as writer:
modified_dataframe.to_excel(writer, sheet_name='Jungen Sortiert Vornamen')
Das Ergebnis unserer Ausgangstabelle sieht dann z. B. so aus:
Du musst das Paket openpyxl zuerst über pip installieren.
pip install openpyxl
# oder
pip3 install openpyxl
Nun wollen wir dieselbe Excel Datei direkt mit openpyxl öffnen. Das können wir mit den folgenden Funktionen erreichen. Wir müssen diesmal den Namen des Tabellenblattes angeben, mit dem wir arbeiten wollen.
import openpyxl
fileXLSX = openpyxl.load_workbook('vornamen_2019_angabe_rangfolge.xlsx')
sheet = fileXLSX["Vornamen 2019 mit Angabe der Ra"]
print(sheet['A2'].value)
Mit den eckigen Klammern können wir eine bestimmte Zelle auswählen und uns dann den Wert daraus anzeigen lassen. Wir können uns auch mehrere Werte mit einer for-Schleife anzeigen lassen:
for row in sheet['B2':'B10']:
for col in row:
print(col.coordinate, col.value)
So können wir die Werte auch als Dictionary oder Liste abspeichern und so, je nachdem was wir tun wollen, weiter verarbeiten.
Mit der cell Methode können wir neue Werte für bestimmte Felder setzen.
sheet.cell(row=10, column=2).value = "Hans"
Nun hat das Feld B10 den Wert Hans und nicht mehr Felix.
Abschließend können wir die Datei abspeichern.
fileXLSX.save('modified.xlsx')
In openpyxl ist es auch möglich ganze Tabellenblätter zu kopieren, ihnen einen neuen Namen zu geben und entsprechend wieder in der Originaldatei zu speichern. Das ist hilfreich, wenn man die Manipulationen in einem getrennten Datenblatt haben will.
copy_sheet = fileXLSX.copy_worksheet(fileXLSX.active)
copy_sheet.title = "Neuer Name"
Mit dem Attribut title
kann der Name des Worksheet angepasst werden.
Wie du siehst, gibt es viele Möglichkeiten in Python mit Excel zu arbeiten. Allerdings würde ich dir empfehlen nur den Import von Excel Dateien zu verwenden und die Daten anschließend in einem nicht privaten Format (proprietären Format) zu speichern (CSV, JSON oder XML), da diese Dateien einfacher in den meisten Programmiersprachen genutzt werden können. In den meistens Programmiersprachen sind schon Parser für CSV, JSON und XML vorhanden, wobei Excel in allen Programmiersprachen, soweit ich weiß, eine extra Library benötigt, die erst importiert werden muss.
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Excel Dateien in Python lesen und schreiben"!