Weiter zum Inhalt

Pandas-Resampling mit resample() und asfreq()

Dieses Tutorial zeigt das Resampling von Zeitreihen in pandas – inklusive Upsampling und Downsampling mit Methoden wie .asfreq() und .resample().
Aktualisiert 18. Sept. 2026  · 7 Min. lesen

Entdecke KI

ChatGPTClaudePerplexity

Zeit ist eine zentrale Dimension in der Datenanalyse. Im Zeitverlauf können Werte schwanken, Trends zeigen oder stabil bleiben. Analysieren wir, wie sich Daten über die Zeit verändern, arbeiten wir mit Zeitreihen.

Eine häufige Aufgabe in der Zeitreihenanalyse ist das Anpassen der Datums- und Zeitfrequenz in unseren Daten – das sogenannte Resampling. In diesem Tutorial nutzen wir Pandas, eine Bibliothek mit leistungsfähigen Tools für eine intuitive und effiziente Arbeit mit Zeitreihen.

Wir starten mit den Grundlagen und steigern uns Schritt für Schritt zu fortgeschrittenen Resampling-Techniken. Dazu gibt es praxisnahe Beispiele und Best Practices, damit deine Zeitreihenanalyse wirksam und performant ist.

Wenn du tiefer in Zeitreihen einsteigen willst, schau dir diesen Kurs zum Arbeiten mit Zeitreihendaten in Python an.

Was ist Zeitreihen-Resampling?

Ähnlich wie wir Daten nach Kategorien gruppieren können, erlaubt uns Resampling, Daten in unterschiedliche Zeitintervalle zu gruppieren. Das ist sowohl für Datenbereinigung als auch für die tiefergehende Zeitreihenanalyse wertvoll. Beispielsweise müssen wir zwei Zeitreihen oft vor einem Vergleich auf eine gemeinsame Frequenz bringen.

Es gibt zwei grundlegende Arten des Resamplings:

  • Upsampling: Erhöhen der Frequenz der Daten (z. B. von jährlich auf monatlich). Dabei entstehen neue Zeitpunkte, die gefüllt oder interpoliert werden müssen.
  • Downsampling: Verringern der Frequenz (z. B. von monatlich auf jährlich). Hierbei werden Datenpunkte innerhalb der neuen, größeren Intervalle aggregiert.

Resampling mit der Pandas-Methode asfreq()

In pandas stehen uns zwei Hauptmethoden für Resampling zur Verfügung: .asfreq() und .resample().

Bevor wir loslegen, importieren wir zunächst die Bibliothek pandas unter dem üblichen Alias pd. Außerdem laden wir matplotlib, um Ergebnisse zu visualisieren.

import pandas as pd
import matplotlib.pyplot as plt

Beginnen wir mit der Methode .asfreq(). Sie konvertiert eine Zeitreihe in eine angegebene Frequenz und gibt die Originaldaten mit einem neuen Index in dieser Frequenz zurück.

Wir arbeiten mit einem Datensatz täglicher Temperaturmessungen in Madrid von 1997 bis 2015. Vor dem Resampling führen wir ein paar Vorverarbeitungsschritte aus.

url = 'https://raw.githubusercontent.com/jcanalesluna/courses_materials/master/datasets/Madrid%20Daily%20Weather%201997-2015.csv'
df = pd.read_csv(url, usecols=['CET', 'Max TemperatureC', 'Mean TemperatureC', 'Min TemperatureC'])

# Change column names
df.columns = ['time', 'max_temp', 'mean_temp', 'min_temp']

# Convert string column to datetime
df['time'] = pd.to_datetime(df['time'])

# Set time column as index
df = df.set_index('time')

df
image11.png

Upsampling mit asfreq()

Zum Veranschaulichen des Upsamplings stellen wir uns vor, wir wollen die täglichen Temperaturwerte in stündliche umwandeln. Das erreichen wir mit .asfreq() und dem Parameter freq='H'.

df_hour = df.asfreq('H')
df_hour

image2.png

Der resultierende Datensatz ist deutlich größer, da neue Zeilen mit stündlichen statt täglichen Daten entstanden sind. Standardmäßig nimmt .asfreq() den ersten Eintrag im ursprünglichen Index und füllt die übrigen Stunden mit Nullwerten auf.

Der resultierende Datensatz ist somit deutlich umfangreicher, denn statt täglicher liegen nun stündliche Werte vor. Standardmäßig wählt .asfreq() den ersten Indexeintrag und erzeugt für die restlichen Stunden fehlende Werte.

Pandas bietet drei Strategien, um diese fehlenden Werte zu füllen:

  • Forward Fill (ffill): Führt die letzte gültige Beobachtung nach vorne fort.
  • Backfill (bfill): Nutzt die nächste gültige Beobachtung, um die Lücke zu füllen.
  • Feste Werte: Ersetzt fehlende Daten durch einen angegebenen Wert.

Die ersten beiden Strategien setzt du über den Parameter method in .asfreq() um, während der feste Wert mit dem Parameter fill_value angegeben wird.

df_mean_temp = df[['mean_temp']]
df_mean_temp_hour= df_mean_temp.asfreq('H')

df_mean_temp_hour['ffill'] = df_mean_temp.asfreq('H', method='ffill')
df_mean_temp_hour['bfill'] = df_mean_temp.asfreq('H', method='bfill')
df_mean_temp_hour['value'] = df_mean_temp.asfreq('H', fill_value=0)
df_mean_temp_hour

image1.png

Downsampling mit asfreq()

Als nächstes schauen wir uns Downsampling an. Angenommen, wir wollen die tägliche Frequenz in eine monatliche ändern. Das geht mit .asfreq() und dem Parameter freq='M'.

In diesem Fall reduzieren wir die Frequenz der Daten, also von täglich auf monatlich. Der resultierende DataFrame hat nur noch 228 Zeilen gegenüber 6.812 Zeilen im Original.

df_month = df.asfreq(freq='M')
df_month

image5.png

Beachte, dass .asfreq() lediglich den letzten Tag eines Monats auswählt und dessen Wert für den gesamten Monat nutzt. Es findet keine Aggregation statt (z. B. die Berechnung der durchschnittlichen Monatstemperatur). Solche Aggregationen erledigen wir im nächsten Abschnitt mit der Methode .resample().

Resampling mit der Pandas-Methode resample()

Während .asfreq() praktisch ist, um Zeitreihen in einer anderen Frequenz anzuzeigen, ist .resample() die erste Wahl, wenn beim Resampling zugleich aggregiert werden soll.

Die Methode .resample() arbeitet ähnlich wie .groupby(): Sie gruppiert Daten innerhalb eines angegebenen Zeitintervalls und wendet dann eine oder mehrere Funktionen auf jede Gruppe an. Das Ergebnis wird einem neuen Datum innerhalb dieses Intervalls zugewiesen.

Wir setzen .resample() sowohl für Upsampling (Füllen oder Interpolieren fehlender Werte) als auch für Downsampling (Aggregieren von Daten) ein.

Werfen wir noch einmal einen Blick auf die stündliche Umwandlung, um zu sehen, wie Upsampling mit .resample() funktioniert. .resample() liefert zunächst ein Resampler-Objekt, auf das wir eine weitere Methode anwenden, um einen DataFrame zu erhalten.

print(df.resample('H'))
DatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=start_day]

Beim Upsampling kann .resample() im Grunde dasselbe leisten wie .asfreq().

df.mean_temp.resample('H').asfreq()

Screenshot 2024-06-04 at 14.10.03.png

Wir können auch dieselben Füll- und Interpolationsstrategien anwenden wie mit .asfreq(). Beispiel für Forward Fill:

df.mean_temp.resample('H').ffill()

image6.png

Darüber hinaus bietet .resample() Methoden, die .asfreq() nicht hat. So können wir etwa .interpolate() nutzen, um Werte an neuen Zeitpunkten zu schätzen, indem Zwischenpunkte auf einer Geraden zwischen vorhandenen Datenpunkten bestimmt werden.

df.mean_temp.resample('H').interpolate()

image8.png

Seine Stärken spielt .resample() vor allem beim Downsampling aus, denn hier lassen sich unterschiedliche Aggregationsmethoden anwenden, um Daten zusammenzufassen. Berechnen wir zum Beispiel die monatlichen Durchschnitts- und die vierteljährlichen Median-Temperaturen für Madrid mit .resample().

df.mean_temp.resample('M').mean()

image4.png

df.mean_temp.resample('Q').median()

image7.png

Fortgeschrittene Resampling-Techniken

Über die Grundlagen hinaus können die Resampling-Methoden von Pandas auch komplexere Fälle abdecken. Schauen wir uns einige häufige Szenarien an.

Individuelle Zeitfrequenzen

Mit Resampling erstellen wir neue Zeitreihen mit genau der Frequenz, die wir brauchen. Gängige Frequenzen sind etwa:

  • W: Wöchentliche Frequenz (endet am Sonntag)
  • M: Monatsende
  • Q: Quartalsende
  • H: Stündlich

Pandas bietet jedoch viele weitere Optionen, je nach Bedarf. Wir können Frequenzen nach Start- oder Endtermin definieren, statt Kalendertagen nur Arbeitstage nutzen oder sogar vollständig eigene Frequenzen erstellen.

df.mean_temp.resample('M').mean() # calendar month end
df.mean_temp.resample('MS').mean() # calendar month start
df.mean_temp.resample('BM').mean() # business calendar end
df.mean_temp.resample('BMS').mean() # business calendar start

Mehrere Aggregationen beim Downsampling

Wie bei groupby() erlaubt .resample() mehrere Aggregationen in einem Schritt. Mit .agg() übergeben wir eine Liste von Funktionen wie mean, median und std.

df.mean_temp.resample('M').agg(['mean','median','std'])

image3.png

Resampling: Best Practices und typische Fallstricke

Pandas ist für große Datensätze stark optimiert, doch mit wachsender DataFrame-Größe können Verarbeitung und Manipulation rechenintensiv werden – besonders beim Upsampling. Stell dir vor, du wandelst eine stündliche Zeitreihe in Sekunden um – der resultierende DataFrame kann riesig werden!

Wenn bei großen Datensätzen Performance-Probleme auftreten, helfen diese Strategien:

  • Lies nur die Spalten ein, die du wirklich brauchst.
  • Verwende speichereffiziente Datentypen.
  • Nutze Chunking beim Einlesen großer Dateien.

Ab pandas 2.0 sind außerdem erweiterte Techniken für effizientere Verarbeitung integriert. Mehr dazu in diesem Artikel zu Pandas 2.0.

Fazit

Resampling ist eine grundlegende Technik der Zeitreihenanalyse. Sie erlaubt es uns, die Datenfrequenz anzupassen, indem wir Werte aggregieren (Downsampling) oder interpolieren (Upsampling). Wir haben gesehen, wie pandas mit .asfreq() und .resample() leistungsstarke Werkzeuge für einen intuitiven und effizienten Workflow bereitstellt.

Wenn du dein Verständnis für Resampling und Zeitreihenmanipulation in Python vertiefen willst, schau dir diese Ressourcen an:


Javier Canales Luna's photo
Author
Javier Canales Luna
LinkedIn

Ich bin freiberufliche Datenanalystin und arbeite mit Unternehmen und Organisationen auf der ganzen Welt an Data-Science-Projekten zusammen. Ich bin auch Ausbilder für Data Science mit mehr als 2 Jahren Erfahrung. Ich schreibe regelmäßig datenwissenschaftliche Artikel in englischer und spanischer Sprache, von denen einige auf etablierten Websites wie DataCamp, Towards Data Science und Analytics Vidhya veröffentlicht wurden. Als Datenwissenschaftlerin mit einem Hintergrund in Politik- und Rechtswissenschaften ist es mein Ziel, an der Schnittstelle von Politik, Recht und Technologie zu arbeiten und die Macht der Ideen zu nutzen, um innovative Lösungen und Erzählungen voranzutreiben, die uns dabei helfen können, dringende Herausforderungen wie die Klimakrise anzugehen. Ich betrachte mich als Autodidakt, der ständig lernt und ein überzeugter Verfechter der Multidisziplinarität ist. Es ist nie zu spät, neue Dinge zu lernen.

Pandas-Resampling: FAQ

What is the difference between rolling and resample in pandas?

Resampling ändert die Frequenz deiner Zeitreihendaten, während Rolling-Operationen Kennzahlen über ein gleitendes Fenster fester Länge innerhalb der Originalfrequenz berechnen.

What is resample('MS') in Python?

resample('MS') ist ein spezieller Parameter der Methode .resample(). Er weist pandas an, die Daten auf Monatsanfang zu resamplen. "MS" steht für Month Start.

When should I use resampling?

Resampling ist nützlich für verschiedene Aufgaben, unter anderem:

  • Mehrere Zeitreihen für Vergleiche auf eine gemeinsame Frequenz bringen.
  • Daten für Analyse oder Visualisierung auf niedrigere Frequenzen aggregieren (z. B. tägliche Daten zu monatlichen Mittelwerten).
  • Fehlende Werte in einer Zeitreihe durch Interpolation auffüllen (Upsampling).

What are the disadvantages of resampling?

  • Upsampling kann Verzerrungen einführen, wenn die Interpolationsmethode unpassend gewählt ist.
  • Downsampling kann zu Informationsverlust führen, da Datenpunkte aggregiert werden.
  • Resampling kann bei großen Datensätzen rechenintensiv sein.
Themen
Datenanalyse
Python

Lerne mehr über Zeitreihen mit diesen Kursen!

Kurs

Maschinelles Lernen für Zeitreihendaten in Python

4 Std.
54.3K
Dieser Kurs dreht sich um Feature Engineering und maschinelles Lernen für Zeitreihendaten.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Ähnlich

Tutorial

Loop-Schleifen in Python-Tutorial

Lerne, wie du For-Schleifen in Python umsetzt, um eine Sequenz oder die Zeilen und Spalten eines Pandas-DataFrame zu durchlaufen.
Aditya Sharma's photo

Aditya Sharma

5 Min.

Tutorial

Python-Listenfunktionen und -Methoden – Tutorial und Beispiele

Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Abid Ali Awan's photo

Abid Ali Awan

7 Min.

Tutorial

Python-Tutorial zum Verknüpfen von Zeichenfolgen

Lerne verschiedene Methoden zum Verknüpfen von Zeichenfolgen in Python kennen, mit Beispielen, die jede Technik zeigen.
DataCamp Team's photo

DataCamp Team

5 Min.

Tutorial

Wie man Listen in Python aufteilt: Einfache Beispiele und fortgeschrittene Methoden

Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Allan Ouko's photo

Allan Ouko

11 Min.

Tutorial

Python range()-Funktion Tutorial

Lerne anhand von Beispielen die Python-Funktion range() und ihre Möglichkeiten kennen.
Aditya Sharma's photo

Aditya Sharma

7 Min.

Tutorial

Python .append() und .extend() Methoden Tutorial

Lerne, wie du mit den Methoden .append() und .extend() Elemente zu einer Liste hinzufügst.
DataCamp Team's photo

DataCamp Team

2 Min.

Mehr AnzeigenMehr Anzeigen