fbpx

#09 – Excel Daten aus mehreren Dateien zusammenfügen

Inhalt
    Add a header to begin generating the table of contents

    In den letzten Teil hast du gelernt, wie du Daten aus mehreren Arbeitsblättern oder Dateien einlesen kannst.

    Aber wie kannst du die Daten jetzt insgesamt auswerten?
    Abfragen über die einzelnen DataFrames und dann manuell wieder zusammen setzen?

    Soweit kommts noch!
    Lass Pandas die Arbeit für dich machen! Und ich zeige dir drei verschiedene Wege, wie du das anstellen kannst.
    Je nach Daten …

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

    Daten einfach zusammen führen

    Im letzten Video hast du mehrere Arbeitsblätter eingelesen:

    data_file = pandas.ExcelFile('/content/drive/MyDrive/california_housing_test_multisheet.xlsx')
    data_file.sheet_names
    data_ort = data_file.parse(sheet_name='Ort', index_col='Index')
    data_person = data_file.parse(sheet_name='Person', index_col='Index')
    data_house = data_file.parse(sheet_name='Haus', index_col='Index')

    Damit hast du jetzt drei DataFrames, mit den Daten aus den verschiedenen Arbeitsblättern.

    Mittlerweile sollte dir klar sein, dass es egal ist, woher die Daten kamen, sobald sie in einem DataFrame sind. 
    Es ist also egal, ob du die Daten über read_csvread_excelparse oder einem der X anderen Wege eingelesen hast.
    Wichtig ist nur: Du hast die Daten in einem DataFrame. 
    Ab dem Zeitpunkt kannst du alle Daten gleich behandeln.

    Im einfachsten Fall möchtest du Daten einfach nur aneinander hängen.
    Dafür liefert dir Pandas die Funktion concat().
    concat nimmt eine Liste von DataFrames entgegen und hängt sie einfach nur aneinander:

    pandas.concat([data_ort, data_person, data_house])

    Nicht vorhandene Werte werden dabei mit NaN aufgefüllt.

    Zur Erinnerung:
    Listen werden definiert, in dem du einfach Komma-getrennt Werte zwischen zwei eckige Klammern schreibst.

    concat benutzt du, wenn es sich nicht um Datensätze handelt, die auf mehrere Dateien aufgespalten wurden wie in diesem Fall, sondern immer dann, wenn die Daten einfach fortlaufend sind und du sie zusammen sammeln möchtest.

    NaN steht für Not a Number und wird von Pandas immer dann eingesetzt, wenn kein Wert existiert, der angezeigt werden könnte.

    In dem Fall hat Pandas korrekt alle Spalten aus allen Dateien zusammen gesammelt und dasselbe für die Zeilen getan.
    Weil aber jeder Datensatz auf drei Arbeitsblätter aufgeteilt war, hast du jetzt auch für jeden Datensatz drei Zeilen.
    Eine für den Ort mit Person und Haus NaN, eine für die Person mit Ort und Haus NaN und eine für das Haus mit Ort und Person NaN.

    In dem Beispiel macht concat also nicht so sonderlich viel Sinn.
    Aber was dann?

    Daten über eine Spalte zusammen führen

    Du hast eine Spalte, die einen Datensatz eindeutig identifiziert: Index
    Mit der Spalte kannst du sofort erkennen, welche Daten zusammen gehören.

    Und das kannst du Pandas natürlich auch mitteilen.
    Dafür benutzt du wieder eine Funktion am DataFrame: merge()

    data_ort_person = data_ort.merge(data_person, left_on='Index', right_on='Index')

    merge() an einem DataFrame aufgerufen nimmt drei Parameter entgegen:
    Ein DataFrame mit dem die Daten verbunden werden sollen
    Die Spalte im „linken“ DataFrame, in dem die Daten zur Identifizierung enthalten sind und die Spalte im „rechten“ DataFrame, in dem die Daten zur Identifizierung enthalten sind. 

    Mit „links“ und „rechts“ ist auch wirklich die Position im Code gemeint.
    data_ort steht links von data_person und damit schreibst du den Spaltennamen mit den identifizierenden Werten auch in left_on und umgekehrt.

    Wichtig ist das, wenn die Daten mal nicht denselben Spaltenbezeichner haben.
    Zum Beispiel könntest du ein Excel Blatt mit dem Spaltennamen Personalnummer haben und ein Weiteres mit dem Spaltennamen Mitarbeiternummer.
    Enthalten sind dieselben Daten und darüber kannst du die Datensätze auch super zusammen führen. Die Spaltennamen sind dennoch unterschiedlich.

    Da deine Daten zum zusammen Führen in dem Beispiel aber denselben Spaltenbezeichner haben, kannst du merge auch etwas kürzer fassen und Pandas mit dem Parameter on einfach nur den Spaltennamen mitteilen, den es aus beiden DataFrames benutzen soll:

    data_ort_person = data_ort.merge(data_person, on='Index')

    Und schon hast du ein DataFrame data_ort_person in dem die Daten von Ort und Person zusammen geführt sind. 
    Jetzt noch einmal mit den Haus-Daten zusammen führen und schon hast du ein großes DataFrame mit allen Daten:

    data_ort_person_house = data_ort_person.merge(data_house, left_on='Index', right_on='Index')

    Zu Beginn des Videos hatte ich dir drei Möglichkeiten versprochen, Daten zusammenzuführen. 
    Also weiter zur dritten: Dem Join.

    Daten über den Index zusammen führen

    Mit join hast du eine Funktion an deinem DataFrame, mit dem du wie bei merge ein DataFrame mit einem anderen zusammen führen kannst.
    Willst du das über eine Spalte machen, gibst du einfach die entsprechende Spalte über den Parameter on an.

    data_ort_person = data_ort.join(data_person, on=['Index'])

    In den Beispiel-Daten hast du die Spalte Index aber auch direkt als Index eingelesen.
    Damit kannst du dir sogar die Angabe von on sparen:

    data_ort_person = data_ort.join(data_person)

    Dir ist vielleicht aufgefallen, dass ich diesmal um den Spaltennamen in on eckige Klammern gesetzt hab. 
    Und eckige Klammern sind immer Listen. 
    Du kannst bei on also eine Liste mit Spalten angeben, falls deine Identifizierung aus mehreren Spalten besteht.
    Zum Beispiel identifizierst du Personen nicht über eine Mitarbeiternummer, sondern aus einer Kombination aus Vorname, Nachname und Geburtstag.
    Dann kannst du hier einfach alle 3 Spalten angeben.

    join ist unterm Strich nur eine Kurzfassung von merge.
    Intern wird sogar merge benutzt. 
    Es erspart dir nur unter bestimmten Umständen die Angabe weiterer Parameter.

    Willst du dich also nur auf eins konzentrieren, empfehle ich dir merge.

    Zusammenfassung

    Also, was hast du in diesem Video gelernt?

    • Mit concat kannst du mehrere DataFrames aneinander hängen

    Aber Achtung:
    concat hängt einfach alle Spalten und Zeilen aneinander.
    Es versucht nicht herauszufinden, ob Datensätze irgendwie zusammen gehören.

    Empfehlung: Nutze concat immer dann, wenn du dasselbe Datenformat aus verschiedenen Quellen bekommst und einfach nur ein großes DaaFrame daraus machen willst.

    • Mit merge kannst du DataFrames anhand von übereinstimmendem Index oder auch übereinstimmenden Spalten zusammen führen

    Bei merge musst du immer mit angeben, über welche Spalte oder welchen Indes die Daten zusammen geführt werden sollen.
    Dadurch werden dann zusammengehörige Daten automatisch zusammen geführt und du bekommst eine Zeile pro Datensatz.
    Egal, auf wie viele Quellen der Datensatz vorher aufgeteilt war.

    Empfehlung: Nutze merge immer dann, wenn du Daten hast, die über mehrere Quellen (Dateien, Arbeitsblätter, andere Quellen) aufgeteilt sind, aber eigentlich zusammen gehören.
    Außerdem brauchst du in jeder Quelle eine oder mehrere Spalten, die gemeinsam einen Datensatz identifizieren.

    • Mit join kannst du DataFrames anhand von übereinstimmendem Index oder auch übereinstimmenden Spalten zusammen führen

    Bei join hast du eigentlich nur eine Kurzform von merge.
    Join nutzt intern mergen und hilft dir nur dabei in bestimmten Situationen manche Parameter nicht angeben zu müssen.

    Empfehlung: Nutze join immer dann, wenn du einfach nur schnell über einen Index Daten zusammen führen willst. 
    Andernfalls ist merge ausführlicher und übersichtlicher.

    Bist du gerade zu Beginn noch von den verschiedenen Möglichkeiten überfordert, dann konzentriere dich auf merge.

    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.