Lerne Coding
Excel Dateien in Python lesen und schreiben
13.12.2020

Excel Dateien mit Python einlesen und schreiben

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. Minuten

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.

Daten mit Pandas einlesen und als xlsx speichern

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.

Installation

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)

Excel Dateien mit Pandas einlesen

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.

Excel Dateien in Pandas speichern

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:

Python Excel Lesen
Python Excel Lesen

Daten mit openpyxl lesen und schreiben

Du musst das Paket openpyxl zuerst über pip installieren.

pip install openpyxl
# oder
pip3 install openpyxl

Daten mit openpyxl lesen

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.

Daten mit openpyxl schreiben

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')

Tabellenblatt mit openpyxl kopieren

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.

Abschließende Worte

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.

Bildquelle - Vielen Dank an die Ersteller:innen für dieses Bild
Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Excel Dateien in Python lesen und schreiben"!

Kommentar schreiben

Vom Autor Empfohlen
close