fbpx

#08 – Excel Arbeitsblätter gezielt einlesen

Inhalt
    Add a header to begin generating the table of contents

    Nach dem letzten Teil hast du hoffentlich so einige Excel Dateien mit Pandas geöffnet.
    Dabei hattest du sicher Probleme mit Excel Dateien mit mehreren Datenblättern, richtig?

    Das werden wir jetzt direkt beheben.

    Für diesen Teil nutzen wir die california_housing_test_multisheet.xlsx Datei.
    Hier kannst du sie herunterladen.

    Excel Datei einlesen

    Pandas bringt neben read_excel auch noch eine Klasse ExcelFile mit, mit der du Excel Dateien einlesen kannst.

    Der Vorteil ist, dass mit ExcelFile erstmal nur die Metadaten der Datei gelesen werden. 
    Also zum Beispiel, welche Arbeitsblätter enthalten sind. 
    Die Datei selbst wird aber noch nicht eingelesen.

    Besonders, wenn du nur bestimmte Arbeitsblätter brauchst, ist das hilfreich. 
    Wieso solltest du Daten in deinen Speicher laden, die du gar nicht benötigst und sowieso gleich wieder verwirfst?

    Öffne deine Datei also erst einmal mit der Klasse ExcelFile:

    data_file = pandas.ExcelFile('/content/drive/MyDrive/california_housing_test_multisheet.xlsx')

    Welche Arbeitsblätter gibt es?

    Mit dem Attribut sheet_names kannst du dir dann eine Liste der enthaltenen Arbeitsblätter ausgeben lassen:

    data_file.sheet_names

    Du bekommst also eine Liste mit den Namen der Arbeitsblätter, die in deiner Excel Datei enthalten sind. 
    Wichtig ist, dass zu dem Zeitpunkt die Daten selbst noch nicht eingelesen wurden!
    Du erhältst erstmal nur Informationen über die Excel Datei.

    Einzelne Arbeitsblätter einlesen

    Um jetzt die Arbeitsblätter einzulesen, kannst du einfach die Funktion parse() benutzen.
    „parse“ nimmt den Namen eines Arbeitsblatts entgegen und liest genau das Arbeitsblatt ein:

    data_ort = data_file.parse(sheet_name='Ort')

    In der Datei sind auch wieder nur die Daten, die du schon aus den vorherigen Videos kennst. 
    Ich habe sie lediglich auf mehrere Arbeitsblätter aufgeteilt und mit einem Index versehen, damit sie wieder zusammen gefunden werden können.

    parse() ist eigentlich nur ein äquivalent zu der Funktion read_excel().
    Dir stehen damit die gleichen Möglichkeiten zur Verfügung.

    Also an Stelle der Code Zeile oben könntest du auch schreiben:

    data_ort = pandas.read_excel('/content/drive/MyDrive/california_housing_test_multisheet.xlsx', sheet_name='Ort')

    Da du die Datei mit dem Pfad aber bereits in der Hand hast … wieso dann nochmal den ganzen Pfad eintippen? Trotzdem interessant zu wissen:
    Alle Funktionen, die dir read_excel() liefert, stehen dir auch mit parse() zur Verfügung.

    Den Index festlegen

    Wenn du dir jetzt die Daten ausgeben lässt, wird dir auffallen, dass der Index doppelt ist.
    Du hast einmal die Spalte „Index“ aus dem Arbeitsblatt, aber zusätzlich noch einen Index, der dir automatisch von Pandas generiert wird. 

    Vor allem, weil dieselben Daten drin stehen, ist das wirklich überflüssig.
    Aber selbst wenn nicht: 
    Wenn du Daten hast, die über mehrere Arbeitsblätter oder sogar über mehrere Excel Dateien verteilt sind, haben sie in der Regel eine gemeinsame Indexspalte.
    Eine Spalte, über die du die Daten zusammen ordnen kannst.
    Eine Personalnummer, eine Kontonummer oder sonst irgendeine Form eindeutiger Identifizierung.

    Den zusätzlichen Index brauchst du nicht. 

    Und damit er gar nicht erst generiert wird, kannst du Pandas direkt beim Laden der Daten mitteilen, dass du bereits einen Index hast, den du benutzen möchtest.
    Dafür steht die der Parameter index_col zur Verfügung:

    data_ort = data_file.parse(sheet_name='Ort', index_col='Index')

    Mit index_col teilst du Pandas mit, dass du bereits einen Index hast und in welcher Spalte er zu finden ist. 
    Pandas nutzt diese Spalte dann beim Einlesen direkt als Index.
    Es wird also nichts zusätzlich erzeugt. 

    Wichtig wird das später, wenn wir zusammengehörige Daten auch zusammen bringen wollen.

    Zusammenfassung

    Über die Klasse ExcelFile kannst du also erstmal herausfinden, welche Arbeitsblätter in deiner Datei existieren.
    Damit lassen sich dann über parse() oder read_excel() in Verbindung mit dem Parameter sheet_name gezielt die Daten einlesen, mit denen du arbeiten willst.

    Zum Schluss hast du noch den Parameter index_col kennengelernt, mit dem du Pandas mitteilen kannst, dass es keinen Index für dich erzeugen muss, weil du bereits einen hast.

    Im nächsten Video zeige ich dir, wie du die Daten jetzt auch wieder zusammensetzen kannst.
    Immerhin willst du Filterungen und Auswertungen ja nicht in jedem Arbeitsblatt einzeln vornehmen und dann wieder manuell zusammen setzen, oder?

    Anfang verpasst? Hier gehts zum vollen Kurs:

    Titelbild - Excel zu Python - free
    Ingo Janßen

    Ingo Janßen

    Lerne nicht einfach programmieren. Löse Probleme und automatisiere Aufgaben!

    Das könnte dich auch interessieren

    Nach oben scrollen
    Newsletter Popup Form

    Keine Inhalte mehr verpassen?

    Melde dich direkt für den "Code-Kompass" an und erhalte nützliche Tipps und Informationen direkt in deinen Posteingang.