Python in Excel für die DatenanalyseDaten filtern mit Pandas – Bedingungen in Python in Excel

Mit Pandas können Sie Bedingungen und Filter definieren. Sie können Text- und Zahlenfilter kombinieren und die gewünschten Informationen extrahieren. Beispiele zeigen, wie Sie Filter definieren.

Filtern als wichtiges Werkzeug für die Datenanalyse

In der Praxis geht es bei Datenanalysen selten darum, den gesamten Datensatz zu betrachten. Viel häufiger möchten Sie gezielt Antworten auf konkrete Fragen erhalten, zum Beispiel:

  • Welche Verkäufe liegen über 100 EUR?
  • Welche Transaktionen stammen aus Deutschland?
  • Welche Produkte enthalten das Wort „Laptop“?
  • Welche Verkäufe haben eine hohe Stückzahl?

In Excel würden Sie dafür typischerweise Filter setzen oder Pivot-Tabellen verwenden. Mit Python in Excel geht das deutlich strukturierter – und vor allem reproduzierbar.

Voraussetzung: Um Python in Excel zu nutzen, aktivieren Sie eine Zelle mit =PY in der Bearbeitungsleiste. Anschließend können Sie Pandas und die xl()-Funktion verwenden, um auf Excel-Daten zuzugreifen.

Datensatz in Python laden

Zunächst importieren Sie Pandas und laden die Daten aus der Excel-Datei oder Ihrer jeweiligen Datenquelle:

import pandas as pd
umsatz = xl("Umsatzdaten[#Alle]", headers=True)
umsatz

Damit steht der gesamte Datensatz als DataFrame zur Verfügung. Er enthält im folgenden Beispiel die Spalten „Datum“, „Land“, „Stadt“, „Produkt“, „Preis“, „Verkaufsmenge“ und „Vertriebskanal“.

Tipp zum Rückgabetyp: Damit die gefilterte Tabelle direkt in Ihren Excel-Zellen erscheint, stellen Sie in der Bearbeitungsleiste oben links den Ausgabemodus von Python-Objekt auf Excel-Wert um.

Importierter Datensatz im DataFrame von Python

Tipp für Datumsspalten: Wenn Ihre Datumsspalte nicht korrekt als Datum erkannt wird, wandeln Sie sie vor dem Filtern um:

umsatz["Datum"] = pd.to_datetime(umsatz["Datum"])

Einfache Filterbedingungen definieren

Nun wollen Sie die Umsatzdaten genauer analysieren. Dazu haben Sie spezielle Fragen formuliert (siehe oben). 

Um die jeweiligen Antworten auf der Grundlage Ihres Datensatzes zu finden, definieren Sie die folgenden Befehle mit Python in Excel.

Beispiel: Verkäufe mit Preis über 50 EUR

import pandas as pd
umsatz = xl("Umsatzdaten[#Alle]", headers=True)
umsatz[umsatz["Preis"] > 50]

Erklärung:

  • umsatz["Preis"] > 50 erzeugt eine Bedingung.
  • Pandas filtert alle Zeilen, die diese Bedingung erfüllen.
  • Das Ergebnis enthält nur Transaktionen mit höherem Preis.

Hinweis: Beachten Sie, dass Filter mit eckigen Klammern [] definiert werden.

Ausgabe gefilterter Datensatz in Python

Weitere Beispiele für die Anwendung der Filterfunktion mit Pandas in Python sind:

Verkäufe mit geringer Verkaufsmenge

umsatz[umsatz["Verkaufsmenge"] < 10]

Preise zwischen 50 EUR und 100 EUR

umsatz[umsatz["Preis"].between(50, 100)]

Verkäufe ab einem bestimmten Datum

umsatz[umsatz["Datum"] >= "2024-01-01"]

Beachten Sie hier die Schreibweise des Datums in Pandas: JJJJ-MM-TT (alternativ: MM-TT-JJJJ)

Spalten nach dem Filtern auswählen

Nun möchten Sie nach dem Filtern nur bestimmte Spalten zurückgeben, statt den gesamten Datensatz anzuzeigen:

umsatz[umsatz["Preis"] > 50][["Produkt", "Preis", "Land"]]

Ausgabe ausgewählter Spalten nach dem Filtern

Noch eleganter ist dafür .loc[], das Filtern und Spaltenauswahl in einem Schritt kombiniert:

umsatz.loc[umsatz["Preis"] > 50, ["Produkt", "Preis", "Land"]]

Im nächsten Schritt möchten Sie wissen, wie viele Zeilen das Filterergebnis enthält:

gefiltert = umsatz[umsatz["Preis"] > 50]
len(gefiltert) 

Anzahl der Zeilen (Datensätze) die Filterbedingung erfüllen

Alternativ können Sie auch die folgende Anweisung verwenden:

gefiltert.shape[0]

Ergebnis nach dem Filtern sortieren

Häufig ist es sinnvoll, das Ergebnis direkt zu sortieren – beispielsweise nach dem höchsten Preis:

umsatz[umsatz["Preis"] > 50].sort_values("Preis", ascending=False)

Ausgabe der gefilterten und sortierten Daten

Datumsbasiertes Filtern – Monat oder Jahr

Neben dem Filtern ab einem bestimmten Datum können Sie auch gezielt nach Jahr oder Monat filtern. Zum Beispiel filtern Sie mit folgendem Befehl alle Datensätze, deren Datum im Monat März (3) liegt.

umsatz[umsatz["Datum"].dt.month == 3]

Filter nach Datum und Monat März

Entsprechend filtern Sie so alle Datensätze des Jahres 2024:

umsatz[umsatz["Datum"].dt.year == 2024]

Mehrere Bedingungen kombinieren

In der Praxis werden häufig mehrere Kriterien kombiniert. Zum Beispiel filtern Sie die Verkäufe mit Preis > 50 EUR und Menge > 20 mit:

umsatz[(umsatz["Preis"] > 50) & (umsatz["Verkaufsmenge"] > 20)]

Kombination von Filtern mit UND-Bedingung (&)

Filterbedingungen, die beide erfüllt sein sollen, entsprechen der logischen UND-Beziehung. Dafür gilt für Pandas und Python:

  • & bedeutet UND.
  • Runde Klammern () um die einzelnen Bedingungen sind zwingend erforderlich.

Der entsprechende Befehl für eine ODER-Bedingung lautet:

umsatz[(umsatz["Land"] == "Deutschland") | (umsatz["Land"] == "Österreich")]

Hier gilt: (senkrechter Strich) bedeutet ODER.

Kombination von Filtern mit ODER-Bedingung (|)

Besonders lesbare Alternative – die .query()-Methode

Für komplexere Bedingungen bietet Pandas eine sehr übersichtliche Syntax:

umsatz.query("Preis > 50 and Verkaufsmenge > 20")

Hier definieren Sie die UND-Bedingung mit and und die ODER-Bedingung mit or.

umsatz.query("Land == 'Deutschland' or Land == 'Österreich'")

Dynamische Filter aus Excel-Zellen

Sie können Werte direkt aus Zellen einbinden. Das heißt, ändert man den Zellenwert, aktualisiert sich der Filter automatisch. Beispiel: Der Vergleichswert steht in Ihrer Excel-Tabelle in der Zelle B2:

vergleichwert = xl("B2")
umsatz.query("Preis > @vergleichwert")

Ablauf:

  • Sie holen den Vergleichswert mit xl("B2") aus der Zelle B2 und übergeben ihn an die Variable vergleichwert.
  • Dann selektieren Sie aus dem Datensatz mit umsatz.query alle Daten, für die der Preis größer (>) ist als der vergleichwert (Wert in Zelle B2).
  • Die Variable übergeben Sie an die Abfrage mit dem Zeichen @.

Textbasierte Filter anwenden

Sehr häufig werden auch Textfelder gefiltert. Folgende Filtervarianten sind dann hilfreich:

Exakte Übereinstimmung

umsatz[umsatz["Vertriebskanal"] == "Online"]

Textfilter mit Pandas und Python

Teiltext suchen (Enthält-Filter)

umsatz[umsatz["Produkt"].str.contains("Laptop", na=False)]

Das na=False sorgt dafür, dass leere Zellen keine Fehlermeldung verursachen.

Groß-/Kleinschreibung ignorieren

umsatz[umsatz["Produkt"].str.contains("laptop", case=False, na=False)]

Zeilen ohne leere Werte in der Spalte „Land“ filtern

umsatz.dropna(subset=["Land"])

Explizit leere Werte filtern

umsatz[umsatz["Land"].notna()]

Mehrere Werte gleichzeitig filtern

Wenn Sie mehrere Werte prüfen möchten, ist die Funktion .isin() sehr hilfreich.

Beispiel: Mehrere Länder auswählen

umsatz[umsatz["Land"].isin(["Deutschland", "Schweiz"])]

Das ist deutlich eleganter als viele ODER-Bedingungen.

Mehrere Bedingungen kombinieren (ODER-Bedingung)

Daten ausschließen (Negation)

Manchmal ist es einfacher zu sagen, was man nicht möchte. Das Symbol ~ (Tilde) kehrt eine Bedingung um.

Beispiel: Alle Länder außer Deutschland

umsatz[~(umsatz["Land"] == "Deutschland")]

Ausgabe mit ausschließendem Filter (~)

Kombination der Negation mit .isin()

Möchten Sie mehrere Werte ausschließen, funktioniert das durch die Kombination von ~ und .isin():

Alle Länder außer Deutschland, Österreich und Schweiz

umsatz[~umsatz["Land"].isin(["Deutschland", "Österreich", "Schweiz"])]

Tipp nach dem Filtern: Oft ist es praktisch, den Index zurückzusetzen:

gefiltert = umsatz[~(umsatz["Land"] == "Deutschland")].reset_index(drop=True)

Häufige Fehler beim Filtern mit Python

Gerade am Anfang passieren oft kleine Fehler. Zum Beispiel fehlende Klammern. So ist es richtig:

umsatz[(umsatz["Preis"] > 50) & (umsatz["Verkaufsmenge"] > 20)]

In Pandas-Filtern müssen Sie die Symbole & (Und) und | (Oder) verwenden, da diese auf den gesamten Datensatz gleichzeitig wirken. Ausnahmen bildet die .query()-Methode, dort können Sie and und or schreiben.

Achten Sie auf die genaue Schreibweise der Spaltennamen. Leerzeichen und Sonderzeichen müssen exakt übernommen werden.

Wenn ein Vergleich nicht funktioniert, prüfen Sie den Datentyp der Spalte mit umsatz.dtypes.

Ein häufiger Fehler: Der direkte Vergleich mit None funktioniert in Pandas nicht korrekt, da NaN-Werte sich beim Vergleich anders verhalten. Falsch wäre: umsatz[umsatz["Land"] == None]

Richtig ist:

umsatz[umsatz["Land"].isna()]

Warum Filtern mit Pandas so mächtig ist

Im Vergleich zu manuellem Filtern bietet Pandas entscheidende Vorteile:

  • Reproduzierbar: Die Filterlogik bleibt fest im Code gespeichert.
  • Keine manuellen Schritte: Bei neuen Daten wird der Filter automatisch korrekt angewendet.
  • Komplexität: Sie können beliebig viele Bedingungen verknüpfen, ohne den Überblick zu verlieren – besonders übersichtlich mit .query() und dynamischen Excel-Zellen.
  • Große Datenmengen: Pandas arbeitet auch bei Zehntausenden Zeilen extrem schnell.

Tipp für sehr große Datenmengen: Die .query()-Methode ist oft effizienter als die []-Syntax, da sie intern optimiert ist.

Ein komplexes Beispiel für Filter mit Pandas und Python

Hier noch ein Beispiel, das mehrere Filtertechniken kombiniert:

hochwertige_deutschland_online = umsatz.query("Preis > 100 and Land == 'Deutschland'").query("Vertriebskanal == 'Online'").reset_index(drop=True)

Beispiel für kombinierte Filtertechniken

Dieser Code filtert

  • zuerst nach hohen Preisen und Deutschland,
  • anschließend nach dem Vertriebskanal „Online“ und
  • setzt den Index zurück – perfekt für eine saubere Ausgabe in Excel.

Möchten Sie dabei nur bestimmte Spalten anzeigen, ergänzen Sie einfach eine Spaltenauswahl:

hochwertige_deutschland_online[["Produkt", "Preis", "Verkaufsmenge"]]

Fazit

Das Filtern von Daten gehört zu den wichtigsten Fähigkeiten in der Datenanalyse. Mit Pandas können Sie einfache Bedingungen formulieren, Text- und Zahlenfilter kombinieren und gezielt genau die Informationen extrahieren, die Sie für Ihre Entscheidung benötigen.

Mit den hier gezeigten Techniken (inklusive .query(), .loc[], Spaltenauswahl und dynamischer Zellverknüpfung) können Sie im nächsten Schritt interaktive Dashboards in Excel bauen.

Vorlagen nutzen

Weitere Kapitel zum Thema