fbpx

#07 – Daten filtern

Inhalt
    Add a header to begin generating the table of contents

    Du sitzt vor einem Berg an Daten und hast keine Ahnung, wie du die richtigen Daten findest?
    Ist das nicht immer so?
    Wann haben wir schonmal die Daten, die wir brauchen dann, wenn wir sie brauchen vor uns liegen …
    Aber keine Sorge!
    In diesem Teil zeige ich dir, wie du ganz gezielt und einfach die Daten findest, die du brauchst.

    Schon neugierig?
    Los gehts!

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

    Excel einlesen

    Zur Vorbereitung musst du deine Daten natürlich wieder einlesen:

    import pandas
    daten = pandas.read_excel('/content/drive/MyDrive/california_housing_test.xlsx')
    daten.head()

    Den Code hast du ja sicher noch.

    Bedingung definieren

    Wenn du nach Daten suchst, weißt du ja, was für Daten es sind.
    Du kennst die Daten selbst noch nicht, aber du hast eine Idee davon, welche Bedingungen die Daten erfüllen sollen.

    Nehmen wir mal an du interessierst dich für das durchschnittliche Einkommen aller 30-jährigen, deren Haus mehr als 500.000,00 $ wert ist.

    Wie kannst du das jetzt anstellen?
    Dazu musst du dir deine Frage erstmal etwas genauer ansehen:

    Wie hoch ist das durchschnittliche Einkommen aller 30-jährigen, deren Haus mehr als 500.000,00 $ wert ist.

    Die Frage besteht doch eigentlich aus 3 Teilen, oder?

    • Wie hoch ist das durchschnittliche Einkommen?
    • Alle 30-jährigen
    • Haus ist mehr als 500.000,00 $ wert

    Das sind 3 einzelne Bestandteile deiner Frage.
    Und die 3 Teile kannst du jetzt auch nochmal etwas kürzer schreiben:
    Daten aus median_income (Den Punkt lässt du im ersten Schritt noch weg)
    housing_median_age == 30
    median_house_value > 500.000

    Hier hast du einen neuen Punkt in Python: Operatoren.
    Eigentlich hast du Operatoren schon im ersten Teil mit dem Gleichheitszeichen (=) kennengelernt.
    Das Gleichheitszeichen (=) ist ein Zuweisungsoperator
    Hier hast du jetzt das Doppel-Gleichheitszeichen(==).
    Damit werden in Programmiersprachen Vergleiche vorgenommen.

    Du „fragst“ also „Sind die beiden Werte links und rechts vom Doppel-Gleichheitszeichen gleich?“

    Und das größer (>) Zeichen solltest du noch aus der Schule kennen 😉
    Damit „fragst“ du „Ist der Wert links von dem Zeichen größer als der Wert rechts von dem Zeichen?“

    Es sind also Vergleichsoperatoren.
    Davon gibt es noch die folgenden:

    >Größer
    <Kleiner
    == Gleich
    >= Größer-oder-Gleich
    <= Kleiner-oder-Gleich
    !=Ungleich

    Ok.
    Du hast deine Frage jetzt also in 3 Bestandteile zerlegt.
    Genau genommen hast du 2 Bedingungen (Punkt 2 und 3) und eine Einschränkung auf deine Ansicht (Punkt 1). Deswegen lassen wir den Punkt 1 auch erst einmal noch bei Seite.

    Jetzt willst du aber nicht alles nach der einen Bedingung filtern und anschließend nach der Anderen.
    Damit hättest du ja immer noch einen großen Haufen Daten, den du vergleichen musst.
    Das hilft nicht weiter. 

    Deswegen ist es möglich, Bedingungen miteinander zu verknüpfen.
    Dafür hast du zwei logische Operatoren:

    &Und
    |Oder

    In dem Beispiel möchtest du, dass beide Bedingungen erfüllt sind. 
    Sonst interessiert dich der Datensatz nicht. 
    Deswegen verknüpfst du die beiden Bedingungen einfach mit dem Und:

    (housing_median_age == 30) & (median_house_value > 500000)

    Die Klammern halten zusammengehöriges zusammen.
    Wie in Mathe früher.
    Und Zahlen schreibst du ohne Formatierungszeichen. Das mag Python nicht.

    Das war es, schon hast du deine beiden Bedingungen zusammen gebracht. 
    Um die jetzt auch auf deine Daten anzuwenden, musst du nur noch die Bedingungen in eckige Klammern direkt an dein DataFrame hängen.

    Also so wie du zuvor gesagt hast „Gib mir alle Daten im Bereich 9:20“, sagst du jetzt, „Gib mir alle Daten, auf die diese Bedingungen zutreffen“.

    Dann musst du deine beiden Bedingungen nur noch so an das DataFrame hängen, wie du es zuvor auch mit dem Bereich gemacht hast. 
    Vorher hast du gesagt „Gib mir alle Daten im Bereich 9:20“.

    Jetzt sagst du „Gib mir alle Daten, auf die diese Bedingungen zutreffen“.
    Und so sieht das dann aus:

    daten_excel[(daten_excel.housing_median_age == 30) & (daten_excel.median_house_value > 500000)]

    Das war es auch schon!
    Also Ergebnis siehst du jetzt 5 Datensätze.
    Alle mit einem housing_median_age von 30 und einem median_house_value größer 500.000,00 $.

    Du wolltest aber nur das median_income sehen?
    Der Rest interessiert dich nicht?

    Ich weiß, aber ich wollte dir erst zeigen, dass du die richtigen Daten bekommst.
    Um jetzt nur noch das median_income zu sehen, kannst du deine Daten einfach auf die Spalte einschränken.

    Dafür setzt du einfach den Spaltennamen in eckigen Klammern direkt an dein DataFrame:

    daten_excel['median_income'][(daten_excel.housing_median_age == 30) & (daten_excel.median_house_value > 500000)]

    Und schon bekommst du nur noch die Daten, die du sehen willst. 
    Na ja … und den Index …. Der bleibt dir auch noch.

    Du willst noch einen kleinen Bonus?
    Dir ist die Population egal und du willst wirklich nur das Durchschnittseinkommen?
    Dann nutze doch direkt einmal die erste Aggregatfunktion: mean()

    Um es etwas leserlicher zu machen, erzeugst du dir erstmal eine Variable und legst die gefilterten Daten dort rein:

    daten_gefiltert = daten_excel['median_income'][(daten_excel.housing_median_age == 30) & (daten_excel.median_house_value > 500000)]

    Und jetzt musst du einfach nur noch die Funktion mean() an deinem DataFrame aufrufen.
    „mean“ ist einfach das englische Wort für Mittelwert oder Durchschnitt.
    Und schon bekommst du aus deinen 5 Werten den Durchschnitt geliefert:

    daten_gefiltert.mean()

    Nicht vergessen: Die Daten hier sind im Faktor 10.000 angegeben. 
    Die resultierenden 9.12476 sind also 91.247,60 $.

    Eine weitere, häufig genutzte Aggregatfunktion ist sum().
    Nicht schwer zu erraten: Damit bildest du die Summe:

    daten_gefiltert.sum()

    In dem Fall ist die Summe der Einkommen der fünf 30-jährigen 456.238,00 $

    Zusammenfassung

    Kurz zusammen gefasst:
    Über eckige Klammern an deinem DataFrame kannst du direkt Einschränkungen mitgeben.
    Sei es auf Spalten, oder nach einem oder mehreren Bedingungen.

    • Mit einem Spaltennamen in eckigen Klammern werden die Daten auf die angegebene Spalte reduziert
    • Bedingungen in eckigen Klammern filtern die Daten heraus, die den Bedingungen entsprechen
    • Bedingungen müssen immer in runden Klammern eingeschlossen sein.
    • Bedingungen werden mithilfe von Vergleichsoperatoren erstellt
    • Mit logischen Operatoren kannst du mehrere Bedingungen verknüpfen.

    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.