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
# 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 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
# 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
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
# 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
# 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
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
# 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
# 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.
Andere ErweiterungenBei 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.