Teil 22: Datums- und Zeitoperationen in Python & Pandas

In vielen Data-Science-Projekten spielen Zeitinformationen eine zentrale Rolle. Ob bei Verkaufsanalysen, Website-Traffic, Finanzdaten oder Sensorwerten – Daten sind häufig zeitgestempelt. Python und Pandas bieten leistungsstarke Werkzeuge, um Datums- und Zeitwerte zu verarbeiten, analysieren und visualisieren. In diesem Teil lernst du, wie man Datumswerte einliest, berechnet, filtert und für Analysen vorbereitet.


1. Datums- und Zeittypen in Python

Python stellt das Modul datetime bereit:

from datetime import datetime, date, time, timedelta

# Aktuelles Datum und Zeit
jetzt = datetime.now()
print(jetzt)  # z.B. 2025-09-23 14:30:00

# Nur Datum
heute = date.today()
print(heute)  # z.B. 2025-09-23

# Zeitdifferenzen
delta = timedelta(days=7)
print(heute + delta)  # Datum in 7 Tagen
  • datetime → Datum + Zeit
  • date → nur Datum
  • time → nur Uhrzeit
  • timedelta → Zeitdifferenzen

2. Datumswerte in Pandas

In Pandas werden Datumswerte meist als datetime64-Typ gespeichert.

import pandas as pd

# Beispiel-DataFrame
df = pd.DataFrame({
    "Datum": ["2025-09-20", "2025-09-21", "2025-09-22"],
    "Verkäufe": [100, 150, 200]
})

# In Datetime konvertieren
df["Datum"] = pd.to_datetime(df["Datum"])
print(df.info())
  • pd.to_datetime() wandelt Strings in Datumsobjekte um
  • Vorteil: Mathematische Operationen und Filter auf Datum möglich

3. Zugriff auf Datumsinformationen

Nach der Konvertierung kann man auf einzelne Bestandteile zugreifen:

df["Jahr"] = df["Datum"].dt.year
df["Monat"] = df["Datum"].dt.month
df["Tag"] = df["Datum"].dt.day
df["Wochentag"] = df["Datum"].dt.day_name()

print(df)

Ergebnis:

       Datum  Verkäufe  Jahr  Monat  Tag Wochentag
0 2025-09-20       100  2025      9   20  Samstag
1 2025-09-21       150  2025      9   21  Sonntag
2 2025-09-22       200  2025      9   22  Montag
  • Nützlich für Zeitreihenanalysen und Aggregationen nach Wochentagen oder Monaten

4. Filtern nach Datum

# Alle Verkäufe nach dem 21.09.2025
df[df["Datum"] > "2025-09-21"]

# Verkäufe im September
df[df["Datum"].dt.month == 9]
  • Kombinierbar mit anderen Bedingungen:
df[(df["Datum"].dt.month == 9) & (df["Verkäufe"] > 120)]

5. Zeitdifferenzen berechnen

df["Vorheriger_Tag"] = df["Datum"].shift(1)
df["Differenz"] = (df["Datum"] - df["Vorheriger_Tag"]).dt.days
print(df)
  • shift(1) → verschiebt Zeilen um 1
  • .dt.days → Differenz in Tagen
  • Praktisch, um Intervalle oder Trends zu berechnen

6. Resampling von Zeitreihen

Bei Zeitreihendaten kann man Daten auf Tages-, Wochen- oder Monatsbasis zusammenfassen:

# Beispiel mit täglichem Datum
daten = pd.date_range(start="2025-09-01", periods=10, freq="D")
df = pd.DataFrame({"Datum": daten, "Verkäufe": [100, 120, 130, 90, 150, 160, 140, 180, 170, 200]})
df.set_index("Datum", inplace=True)

# Wöchentliche Summe
wochen = df.resample("W").sum()
print(wochen)
  • resample("W") → gruppiert nach Woche
  • Ebenso möglich: "M" = Monat, "D" = Tag

7. Datumsoperationen mit Timedelta

# Verkäufe um 7 Tage verschieben
df["Verkäufe_7Tage_später"] = df["Verkäufe"].shift(7)

# Zeitdifferenz in Tagen
df["Differenz"] = (df.index - df.index.min()).days
  • shift() → Verschiebung für Trend- oder Vergleichsanalysen
  • timedelta → flexibel für Berechnungen

8. Praxisbeispiel: Verkaufsanalyse

df = pd.DataFrame({
    "Datum": pd.date_range(start="2025-09-01", periods=7, freq="D"),
    "Verkäufe": [100, 150, 200, 130, 170, 180, 160]
})

# Datumsinformationen extrahieren
df["Wochentag"] = df["Datum"].dt.day_name()
df["Monat"] = df["Datum"].dt.month

# Filter: Verkäufe über 150
high_sales = df[df["Verkäufe"] > 150]

# Berechnung der täglichen Differenz
df["Diff"] = df["Verkäufe"].diff()

print(df)

Ergebnis:

       Datum  Verkäufe Wochentag  Monat  Diff
0 2025-09-01      100   Montag      9   NaN
1 2025-09-02      150   Dienstag   9   50.0
2 2025-09-03      200   Mittwoch   9   50.0
...
  • Zeigt Extraktion, Filterung und Berechnung von Zeitreihen

9. Tipps für Data Science

  1. Datumsangaben direkt beim Laden konvertieren (parse_dates)
  2. Zeitreihenindex setzen → erleichtert Resampling und Aggregationen
  3. Shift und Diff für Trendanalysen verwenden
  4. Wochentag, Monat, Jahr extrahieren für Gruppierungen
  5. Zeitzonen beachten, wenn Daten aus internationalen Quellen

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert