Das effiziente Filtern von Pandas DataFrames anhand von Datumsbereichen ist eine entscheidende Fähigkeit in der Datenanalyse. Pandas bietet verschiedene Methoden, um dies zu erreichen, jede mit ihren Stärken und Schwächen. Dieser Artikel untersucht vier gängige Ansätze und vergleicht deren Syntax, Effizienz und Anwendungsfälle.
Inhaltsverzeichnis
- Filtern mit Boolescher Maskierung
- Verwendung der
.query()
-Methode - Anwendung der
.isin()
-Methode - Nutzen der
.between()
-Methode
Filtern mit Boolescher Maskierung
Die Boolesche Maskierung bietet den grundlegendsten und flexibelsten Ansatz. Sie erstellt ein boolesches Array (Maske), das Zeilen basierend auf angegebenen Bedingungen filtert. Diese Methode ist sehr gut an komplexe Szenarien anpassbar.
import pandas as pd
data = {'Date': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')
mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
filtered_df = df[mask] #Effizienter als df.loc[mask]
print(filtered_df)
Verwendung der .query()
-Methode
Die .query()
-Methode bietet eine lesbarere und prägnantere Alternative zum Filtern. Sie ist besonders bei komplexen Bedingungen von Vorteil.
start_date = '2023-11-01'
end_date = '2024-01-01'
filtered_df = df.query('@start_date <= Date <= @end_date')
print(filtered_df)
Anwendung der .isin()
-Methode
Die .isin()
-Methode eignet sich, wenn Sie Zeilen basierend auf einer Liste spezifischer Daten auswählen müssen, anstatt eines kontinuierlichen Bereichs. Sie ist weniger effizient für große kontinuierliche Bereiche.
dates_to_include = pd.to_datetime(['2023-11-15', '2023-12-01'])
filtered_df = df[df['Date'].isin(dates_to_include)]
print(filtered_df)
Nutzen der .between()
-Methode
Die .between()
-Methode bietet einen optimierten Ansatz zur Auswahl von Zeilen innerhalb eines kontinuierlichen Datumsbereichs. Sie ist effizient und einfach zu lesen.
start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')
filtered_df = df[df['Date'].between(start_date, end_date, inclusive='both')] #inclusive Argument hinzugefügt zur besseren Übersicht
print(filtered_df)
Zusammenfassend bietet Pandas verschiedene Methoden für das datumsbasierte Filtern. Die optimale Wahl hängt von Ihren spezifischen Anforderungen und Ihrem Codierungsstil ab. Die Boolesche Maskierung bietet maximale Flexibilität, .query()
verbessert die Lesbarkeit und .between()
vereinfacht die Auswahl kontinuierlicher Bereiche. Stellen Sie sicher, dass Ihre Datumsspalte den Datentyp datetime64
hat, um eine optimale Leistung zu gewährleisten.