Pandas Datenfilterung

PandasBeginner
Jetzt üben

Einführung

Willkommen zum Pandas Filtering Data Lab! Datenfilterung ist eine der häufigsten und wichtigsten Aufgaben in der Datenanalyse. Sie ermöglicht es Ihnen, eine Teilmenge Ihrer Daten auszuwählen, die bestimmte Kriterien erfüllt, und sich so auf die Informationen zu konzentrieren, die für Ihre Analyse am relevantesten sind.

Pandas ist eine leistungsstarke Python-Bibliothek für Datenmanipulation und -analyse. Seine Kern-Datenstruktur, der DataFrame, ist eine zweidimensionale Datentabelle mit Zeilen und Spalten. In diesem Lab lernen Sie mehrere grundlegende Techniken zum Filtern von Zeilen aus einem Pandas DataFrame. Wir werden behandeln:

  • Filtern mit einer einzelnen booleschen Bedingung.
  • Kombinieren mehrerer Bedingungen mit logischen Operatoren.
  • Verwenden der isin()-Methode zum Abgleichen mehrerer Werte.
  • Entfernen von Zeilen mit fehlenden Daten (NaN).
  • Zählen der Ergebnisse Ihrer gefilterten Daten.

Am Ende dieses Labs werden Sie eine solide Grundlage für die Auswahl und Isolierung von Daten in Ihren Pandas-Projekten haben.

Zeilen mit boolescher Bedingung filtern

In diesem Schritt lernen Sie die grundlegendste Filtertechnik kennen: das boolesche Indizieren (boolean indexing). Diese Methode beinhaltet die Erstellung einer booleschen Bedingung, die eine Pandas Series mit True- und False-Werten zurückgibt. Wenn Sie diese Series an einen DataFrame übergeben, werden nur die Zeilen zurückgegeben, bei denen der Wert True ist.

Beginnen wir damit, unseren DataFrame zu filtern, um alle Mitarbeiter zu finden, die älter als 30 Jahre sind.

Öffnen Sie zuerst die Datei main.py im Editor auf der linken Seite. Die Datei wurde bereits mit einem Beispiel-DataFrame vorbefüllt.

Ersetzen Sie nun die vorhandenen print-Anweisungen am Ende von main.py durch den folgenden Code. Dieser Code erstellt eine boolesche Bedingung df['Age'] > 30 und verwendet sie zum Filtern des DataFrames.

## Filter for employees older than 30
older_than_30 = df[df['Age'] > 30]

print("Employees older than 30:")
print(older_than_30)

Ihre vollständige Datei main.py sollte nun wie folgt aussehen:

import pandas as pd
import numpy as np

## Create a sample DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
    'Department': ['HR', 'HR', 'Sales', 'IT', 'IT', 'Finance'],
    'Age': [25, 45, 38, 52, 29, 33],
    'Salary': [50000, 80000, 75000, 95000, 62000, np.nan]
}

df = pd.DataFrame(data)

## Filter for employees older than 30
older_than_30 = df[df['Age'] > 30]

print("Employees older than 30:")
print(older_than_30)

Lassen Sie uns nun das Skript ausführen. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:

python3 main.py

Sie sollten die folgende Ausgabe sehen, die nur die Mitarbeiter auflistet, deren Alter größer als 30 ist.

Employees older than 30:
      Name Department  Age   Salary
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
5    Frank    Finance   33      NaN

Filter mit dem '&'-Operator kombinieren

In diesem Schritt werden wir mehrere Bedingungen kombinieren, um komplexere Filterungen durchzuführen. Sie können boolesche Bedingungen mit logischen Operatoren kombinieren. Die gebräuchlichsten sind & für AND und | für OR.

Eine wichtige Syntaxregel besagt, dass jede Bedingung aufgrund der Operatorrangfolge (operator precedence) von Python in Klammern () eingeschlossen sein muss.

Lassen Sie uns den DataFrame filtern, um Mitarbeiter zu finden, die in der Abteilung 'IT' arbeiten und älter als 30 Jahre sind.

Ändern Sie Ihre main.py-Datei. Ersetzen Sie den Filtercode aus dem vorherigen Schritt durch den neuen Code unten.

## Filter for employees in IT and older than 30
it_and_older = df[(df['Department'] == 'IT') & (df['Age'] > 30)]

print("IT employees older than 30:")
print(it_and_older)

Beachten Sie, wie jede Bedingung, df['Department'] == 'IT' und df['Age'] > 30, in ihre eigenen Klammern eingeschlossen ist.

Speichern Sie die Datei main.py und führen Sie sie im Terminal aus:

python3 main.py

Die Ausgabe zeigt nur die Mitarbeiter an, die beide Bedingungen erfüllen. In unserem Datensatz passt nur David zu diesem Kriterium.

IT employees older than 30:
    Name Department  Age   Salary
3  David         IT   52  95000.0

Verwendung der isin-Methode für den Wertabgleich

In diesem Schritt lernen Sie, wie Sie Zeilen filtern, bei denen der Wert einer Spalte einer von mehreren möglichen Werten ist. Während Sie mehrere | (OR)-Bedingungen verwenden könnten, ist die isin()-Methode eine effizientere und besser lesbare Methode. Diese Methode nimmt eine Liste von Werten entgegen und gibt für jede Zeile, in der der Wert der Spalte in dieser Liste enthalten ist, True zurück.

Suchen wir alle Mitarbeiter, die entweder in der Abteilung 'HR' oder 'Finance' arbeiten.

Aktualisieren Sie die Filterlogik in Ihrer main.py-Datei mit dem folgenden Code:

## Filter for employees in HR or Finance departments
hr_or_finance = df[df['Department'].isin(['HR', 'Finance'])]

print("Employees in HR or Finance:")
print(hr_or_finance)

Hier prüft isin(['HR', 'Finance']), welche Zeilen in der Spalte Department entweder den Wert 'HR' oder 'Finance' haben.

Speichern Sie die Datei und führen Sie das Skript im Terminal aus:

python3 main.py

Die Ausgabe zeigt alle Mitarbeiter aus den angegebenen Abteilungen an.

Employees in HR or Finance:
    Name Department  Age   Salary
0  Alice         HR   25  50000.0
1    Bob         HR   45  80000.0
5  Frank    Finance   33      NaN

Filtern mit notnull zum Entfernen von NaN

In diesem Schritt befassen wir uns damit, wie fehlende Daten behandelt werden. In Pandas werden fehlende Werte typischerweise durch NaN (Not a Number) dargestellt. Oft ist es notwendig, Zeilen mit diesen fehlenden Werten zu filtern, bevor Berechnungen durchgeführt werden.

Die Methode notnull() gibt eine boolesche Series zurück, die für nicht fehlende Werte True und für fehlende (NaN) Werte False ist. Sie können dies verwenden, um Zeilen mit NaN in einer bestimmten Spalte einfach zu entfernen.

Lassen Sie uns unseren DataFrame filtern, um nur die Mitarbeiter zu sehen, für die wir Gehaltsinformationen haben.

Ändern Sie die Datei main.py, um die Methode notnull() für die Spalte Salary zu verwenden.

## Filter out rows with missing Salary
valid_salary = df[df['Salary'].notnull()]

print("Employees with valid salary information:")
print(valid_salary)

Dieser Code wählt alle Zeilen aus, bei denen die Spalte Salary kein NaN enthält.

Speichern Sie die Datei und führen Sie das Skript im Terminal aus:

python3 main.py

Wie Sie in der Ausgabe sehen können, wurde Frank, der ein NaN-Gehalt hatte, aus dem Ergebnis ausgeschlossen.

Employees with valid salary information:
      Name Department  Age   Salary
0    Alice         HR   25  50000.0
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
4      Eve         IT   29  62000.0

Gefilterte Zeilen mit der len-Funktion zählen

In diesem letzten Schritt lernen Sie, wie Sie die Anzahl der Zeilen in einem gefilterten DataFrame zählen. Nachdem Sie einen Filter angewendet haben, müssen Sie oft wissen, wie viele Zeilen Ihre Kriterien erfüllt haben. Eine einfache Möglichkeit, dies zu tun, ist die Verwendung der integrierten len()-Funktion von Python, die die Anzahl der Zeilen in einem DataFrame zurückgibt.

Filtern wir alle Mitarbeiter der Abteilung 'IT' und zählen wir sie dann.

Aktualisieren Sie Ihre main.py-Datei mit dem folgenden Code. Wir werden zuerst den DataFrame filtern und dann den resultierenden gefilterten DataFrame an die len()-Funktion übergeben.

## Filter for employees in the IT department
it_employees = df[df['Department'] == 'IT']

## Count the number of IT employees
num_it_employees = len(it_employees)

print(f"Number of employees in IT: {num_it_employees}")

Dieser Code erstellt zuerst einen neuen DataFrame it_employees, der nur die Zeilen für die IT-Abteilung enthält. Dann berechnet er die Länge dieses neuen DataFrames und gibt eine formatierte Zeichenkette mit dem Ergebnis aus.

Speichern Sie die Datei und führen Sie das Skript aus:

python3 main.py

Die Ausgabe wird eine einzelne Zeile sein, die Ihnen die Anzahl mitteilt.

Number of employees in IT: 2

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss des Pandas Filtering Data Labs!

In diesem Lab haben Sie die wesentlichen Techniken zur Auswahl von Datenteilmengen aus einem Pandas DataFrame gelernt und geübt. Sie haben Folgendes behandelt:

  • Boolesche Indizierung: Filtern von Daten basierend auf einer einzelnen Bedingung (z. B. df[df['Age'] > 30]).
  • Kombinieren von Filtern: Verwenden des & (UND)-Operators, um mehrere Bedingungen gleichzeitig anzuwenden, wobei jede Bedingung in Klammern gesetzt werden muss.
  • Wertabgleich mit isin(): Effizientes Filtern von Zeilen, bei denen der Wert einer Spalte mit einem beliebigen Wert in einer gegebenen Liste übereinstimmt.
  • Umgang mit fehlenden Daten: Verwenden der Methode notnull(), um Zeilen mit NaN-Werten zu entfernen.
  • Zählen gefilterter Zeilen: Verwenden der Funktion len(), um die Anzahl der Zeilen in einem gefilterten DataFrame zu erhalten.

Diese Filterfähigkeiten sind grundlegend für nahezu alle Datenanalyseaufgaben. Wenn Sie diese beherrschen, können Sie Ihre Datensätze effektiv erkunden und für weitere Analysen und Visualisierungen vorbereiten. Üben Sie diese Techniken weiter, um mit Pandas versierter zu werden.