Pandas Datum und Uhrzeit

Pandas bietet leistungsstarke Möglichkeiten zur Verarbeitung von Datum und Uhrzeit, sodass Zeichenfolgen einfach in Datumstypen umgewandelt und verschiedene datumsbezogene Berechnungen und Analysen durchgeführt werden können.


Datum und Uhrzeit erstellen

date_range-Funktion

Beispiel

import pandas as pd

# Datumsbereich erstellen
dates = pd.date_range("2024-01-01", periods=10, freq="D")
print("Nach Tag:")
print(dates)
print()

# Nach Monat
dates_month = pd.date_range("2024-01-01", periods=12, freq="M")
print("Nach Monat:")
print(dates_month)
print()

# Nach Stunde
dates_hour = pd.date_range("2024-01-01 00:00", periods=24, freq="H")
print("Nach Stunde (erste 5):")
print(dates_hour[:5])

DatetimeIndex und DatetimeArray

Beispiel

import pandas as pd
import numpy as np

# Erstellen mit datetime-Objekt
dt = pd.DatetimeIndex([
    pd.Timestamp("2024-01-01"),
    pd.Timestamp("2024-01-02"),
    pd.Timestamp("2024-01-03")
])
print("DatetimeIndex:")
print(dt)
print()

# Erstellen einer Series mit Zeit
s = pd.Series(
    [100, 200, 300],
    index=pd.date_range("2024-01-01", periods=3, freq="D")
)
print("Series mit Datumsindex:")
print(s)

Umwandlung von Strings in Datumsangaben

pd.to_datetime

Beispiel

import pandas as pd

# Zeichenfolgen in verschiedenen Formaten in Datumsangaben konvertieren
dates_str = ["2024-01-01", "2024/01/02", "01-03-2024", "20240104"]

# Format automatisch ableiten
dt = pd.to_datetime(dates_str)
print("Automatisch abgeleitetes Format:")
print(dt)
print()

# Format angeben
dt2 = pd.to_datetime(dates_str, format="%Y-%m-%d")
print("Angegebenes Format:")
print(dt2)
print()

# Ungültige Werte behandeln
dt3 = pd.to_datetime(["2024-01-01", "invalid", "2024-01-03"], errors="coerce")
print("Ungültige Werte behandeln (in NaT umgewandelt):")
print(dt3)

read_csv Automatisches Datumsparsing

Beispiel

import pandas as pd
from io import StringIO

# CSV-Daten simulieren
csv_data = """Date,Sales
2024-01-01,100
2024-01-02,200
2024-01-03,150
"""


# Methode 1: Nach dem Einlesen konvertieren
df = pd.read_csv(StringIO(csv_data))
df["Date"] = pd.to_datetime(df["Date"])
print("Nach dem Einlesen konvertieren:")
print(df.dtypes)
print()

# Methode 2: Beim Einlesen direkt parsen
df2 = pd.read_csv(StringIO(csv_data), parse_dates=["Date"])
print("Beim Lesen parsen:")
print(df2.dtypes)

Zugriff auf Datumsattribute

Nach der Konvertierung von Datum und Uhrzeit in den datetime-Typ können Sie ganz einfach verschiedene Attribute extrahieren.

Beispiel

import pandas as pd

# Eine Datums-Series erstellen
s = pd.Series(pd.date_range("2024-01-15", periods=5, freq="D"))

print("Datums-Series:")
print(s)
print()

# Jahr/Monat/Tag extrahieren
print("Jahr extrahieren:")
print(s.dt.year)
print()

print("Monat extrahieren:")
print(s.dt.month)
print()

print("Tag extrahieren:")
print(s.dt.day)
print()

# Wochentag extrahieren (0=Montag, 6=Sonntag)
print("Wochentag (Zahl):")
print(s.dt.dayofweek)
print()

# Wochentagname extrahieren
print("Wochentagname:")
print(s.dt.day_name())

Weitere Datumsattribute

Attribute Beschreibung Beispiel
year Jahr 2024
month Monat (1-12) 1
day Tag (1-31) 15
hour Stunde (0-23) 10
minute Minute (0-59) 30
dayofweek Wochentag (0-6) 0
quarter Quartal (1-4) 1
is_month_start Ist Monatsanfang Wahr/Falsch
is_month_end Ist Monatsende Wahr/Falsch

Datumsoperationen

Datumsaddition und -subtraktion

Beispiel

import pandas as pd

# Ein Datum erstellen
date = pd.Timestamp("2024-01-15")
print(f"Basisdatum: {date}")
print()

# Tage addieren/subtrahieren
print(f"+3 Tage: {date + pd.Timedelta(days=3)}")
print(f"-5 Tage: {date - pd.Timedelta(days=5)}")
print()

# Datumsdifferenz
date1 = pd.Timestamp("2024-01-01")
date2 = pd.Timestamp("2024-01-15")
print(f"Datumsdifferenz: {date2 - date1}")
print(f"Tagesdifferenz: {(date2 - date1).days}")
print()

# Operationen mit Datumsreihen
dates = pd.date_range("2024-01-01", periods=5, freq="D")
print("Datum + 3 Tage:")
print(dates + pd.Timedelta(days=3))

Datums-Offsets

Beispiel

import pandas as pd

date = pd.Timestamp("2024-01-15")
print(f"Basisdatum: {date}")
print()

# Anfang/Ende des Monats
print(f"Anfang des Monats: {date + pd.offsets.MonthBegin(1)}")
print(f"Ende des Monats: {date + pd.offsets.MonthEnd(1)}")
print()

# Jahresversatz
print(f"1 Jahr hinzufügen: {date + pd.DateOffset(years=1)}")
print(f"1 Monat subtrahieren: {date + pd.DateOffset(months=-1)}")
print()

# Wochentag
print(f"Nächster Montag: {date + pd.offsets.Week(weekday=0)}")

Umgang mit Zeitzonen

Beispiel

import pandas as pd

# Zeit ohne Zeitzone erstellen
dates = pd.date_range("2024-01-01 10:00", periods=3, freq="H")
print("Ohne Zeitzone:")
print(dates)
print()

# Zeitzone festlegen
dates_utc = dates.tz_localize("UTC")
print("UTC-Zeitzone festlegen:")
print(dates_utc)
print()

# Zeitzone umwandeln
dates_shanghai = dates_utc.tz_convert("Asia/Shanghai")
print("In die Zeitzone Shanghai umwandeln:")
print(dates_shanghai)

Übung: Analyse von Verkaufsdaten

Beispiel

import pandas as pd

# Verkaufsdaten simulieren
df = pd.DataFrame({
    "Date": pd.date_range("2024-01-01", periods=30, freq="D"),
    "Verkäufe": [100, 150, 120, 180, 200, 90, 80] * 4 + [100, 100]
})
df["Date"] = pd.to_datetime(df["Date"])

print("Verkaufsdaten:")
print(df.head(10))
print()

# Statistik nach Wochentag
print("Durchschnittliche Verkäufe nach Wochentag:")
weekday_sales = df.groupby(df["Date"].dt.day_name())["Sales"].mean()
print(weekday_sales)
print()

# Statistik nach Monat
print("Nach Monat:")
df["Month"] = df["Date"].dt.to_period("M")
monthly_sales = df.groupby("Month")["Sales"].sum()
print(monthly_sales)
print()

# 7-Tage-Gleitdurchschnitt berechnen
df["7-day rolling average"] = df["Sales"].rolling(window=7).mean()
print("7-Tage-Gleitdurchschnitt hinzufügen:")
print(df.head(10))

FAQ

1. Inkonsistente Datumsformate

Bei Verwendungpd.to_datetimeSie können angebenformatden Parameter, um das Format zu klären und Parsing-Fehler zu vermeiden.

2. Verwirrung bei Zeitzonen

Stellen Sie bei der Verarbeitung von Daten über Zeitzonen hinweg sicher, dass alle Zeiten eine einheitliche Zeitzone oder UTC-Zeit verwenden.

3. Datumsoperationen verwenden Timedelta

Die Addition und Subtraktion von Datumsangaben verwendetpd.Timedelta, anstatt einfacher Ganzzahladdition und -subtraktion.

Bei der Verarbeitung von Zeitreihendaten wird empfohlen, Datumszeichenfolgen so früh wie möglich in den datetime-Typ zu konvertieren, um die leistungsstarke Datumsfunktionalität von Pandas zu nutzen.

Andere Erweiterungen