Pandas pd.date_range()-Funktion

Pandas 通用函数Pandas Häufige Funktionen


pd.date_range()wird in der Pandas-Bibliothek verwendet, umDatumsbereiche zu generierenFunktion. Sie erstellt einen DatetimeIndex mit aufeinanderfolgenden Datumsangaben, der häufig zum Erstellen, Indizieren und Ausrichten von Zeitreihendaten verwendet wird.

In der Zeitreihenanalyse ist es oft notwendig, Datumsfolgen mit einer festen Frequenz zu erzeugen, z. B. für tägliche, monatliche oder jährliche Daten. pd.date_range() bietet flexible Parameter, um verschiedene Frequenzanforderungen zu erfüllen.

Begriffsdefinition: date_rangeEs bedeutet „Datumsbereich“, d. h. das Generieren einer Sammlung aufeinanderfolgender Datumsangaben.


Grundlegende Syntax und Parameter

pd.date_range()ist eine Top-Level-Funktion der Pandas-Bibliothek, die verwendet wird, um Datetime-Indizes mit einer angegebenen Frequenz zu erzeugen.

Syntaxformat

pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None)

Parameterbeschreibung

Parameter Type Erforderlich Beschreibung Standardwert
start String oder datetime Optional Startdatum. Keine
end String oder datetime Optional Enddatum. Keine
periods Integer Optional Anzahl der zu erzeugenden Datumsangaben. Verwenden Sie zwei beliebige von start, end und periods. Keine
freq String oder DateOffset Optional Frequenz: 'D' (Tag), 'H' (Stunde), 'M' (Monatsende), 'MS' (Monatsanfang), 'Y' (Jahresende), 'W' (Woche), usw. 'D'
tz String Optional Zeitzonenname, z. B. 'UTC', 'Asia/Shanghai'. Keine
normalize Boolean Optional Wenn True, werden Zeiten auf Mitternacht normalisiert. False
name String Optional Name des resultierenden DatetimeIndex. Keine
geschlossen String Optional Intervall-Inklusivität: 'left', 'right', None (Standard, beide inklusive). Keine

Beschreibung des Rückgabewerts

  • Rückgabewert: Gibt ein DatetimeIndex-Objekt zurück, das aufeinanderfolgende Datums-/Zeitwerte enthält.
  • Wirkung: Erzeugt eine Datumssequenz basierend auf dem angegebenen Startdatum, Enddatum und der Häufigkeit.

Beispiele

Lassen Sie uns durch eine Reihe von Beispielen von einfach bis komplex gründlich meistern,pd.date_range()seine Verwendung gründlich beherrschen.

Beispiel 1: Grundlegende Verwendung - Generieren eines Datumsbereichs

Beispiel

import pandas as pd

# 1. Verwenden Sie die Parameter start und end, um einen Datumsbereich zu generieren (Standardhäufigkeit ist täglich)
print("=== Von 2023-01-01 bis 2023-01-10 ===")
dates = pd.date_range(start='2023-01-01', end='2023-01-10')
print(dates)
print(f"Typ: {type(dates)}")
print(f"Datentyp: {dates.dtype}")

# 2. Verwenden Sie den Parameter periods, um die Anzahl der zu generierenden Datumswerte anzugeben
print("n=== 7 Tage Datumswerte generieren ===")
week_dates = pd.date_range(start='2023-01-01', periods=7)
print(week_dates)

# 3. Verwenden Sie den Parameter freq, um die Häufigkeit anzugeben
print("n=== Ein Datum pro Woche (freq='W') ===")
weekly_dates = pd.date_range(start='2023-01-01', periods=5, freq='W')
print(weekly_dates)

# 4. Datum am Anfang jedes Monats (freq='MS' = Monatsanfang)
print("n=== Monatsanfang (freq='MS') ===")
monthly_dates = pd.date_range(start='2023-01-01', periods=6, freq='MS')
print(monthly_dates)

# 5. Datum am Ende jedes Jahres (freq='YE' = Jahresende)
print("n=== Jahresende (freq='YE') ===")
yearly_dates = pd.date_range(start='2023-01-01', periods=3, freq='YE')
print(yearly_dates)

Ausgabe:

=== 从 2023-01-01 到 2023-01-10 ===
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05',
               '2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-10'],
              dtype='datetime64[ns]', freq='D')
Type: <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
数据类型: datetime64[ns]

=== 生成 7 天的日期 ===
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05',
               '2023-01-06', '2023-01-07'], dtype='datetime64[ns]', freq='D')

=== 每周一个日期 (freq='W') ===
DatetimeIndex(['2023-01-01', '2023-01-08', '2023-01-15', '2023-01-22', '2023-01-29'], dtype='datetime64[ns]', freq='W-SUN')

=== 每月初 (freq='MS') ===
DatetimeIndex(['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01',
               '2023-06-01'], dtype='datetime64[ns]', freq='MS')

=== 每年末 (freq='YE') ===
DatetimeIndex(['2023-12-31', '2024-12-31', '2025-12-31'], dtype='datetime64[ns]', freq='YE-DEC')

Code-Erklärung:

  1. pd.date_range()Erzeugt standardmäßig eine Datumssequenz mit täglicher Frequenz.
  2. freqDer Parameter unterstützt mehrere Frequenzkürzel: 'D' (Tag), 'W' (Woche), 'M' (Monatsende), 'MS' (Monatsanfang), 'Y' (Jahresende), 'H' (Stunde), usw.
  3. Zurückgegeben wird ein DatetimeIndex-Objekt, das direkt als Index einer Series oder eines DataFrame verwendet werden kann.

Beispiel 2: Generieren von Zeitreihendaten

Erstellen Sie ein DataFrame mit einem Datumsindex für die Zeitreihenanalyse.

Beispiel

import pandas as pd
import numpy as np

# 1. Erstellen Sie ein DataFrame mit einem Datumsindex
print("=== Eine einfache Zeitreihe erstellen ===")

# Erzeuge 30 Tage an Datumsangaben
date_index = pd.date_range(start='2023-01-01', periods=30, freq='D')

# DataFrame erstellen
df = pd.DataFrame({
    'date': date_index,
    'value': np.random.randint(10, 100, size=30),  # Zufallswerte
    'category': ['A', 'B'] * 15  # Alternierende Kategorien
})

print(df.head(10))

# 2. Datum als Index setzen
print("n=== Datum als Index setzen ===")
df_indexed = df.set_index('date')
print(df_indexed.head())

# 3. Stündliche Daten generieren (für Log-Analyse)
print("n=== Stündliche Zeitreihe ===")
hourly_index = pd.date_range(start='2023-01-01 08:00', periods=24, freq='H')
hourly_data = pd.DataFrame({
    'timestamp': hourly_index,
    'visitors': np.random.randint(0, 100, size=24)
})
print(hourly_data)

Ausgabe:

=== 创建一个简单的时间序列 ===
        date  value category
0 2023-01-01     67        A
1 2023-01-02     23        B
2 2023-01-03     45        A
3 2023-01-04     89        B
4 2023-01-05     12        A
5 2023-01-06     34        B
6 2023-01-07     56        A
7 2023-01-08     78        B
8 2023-01-09     91        A
9 2023-01-10     55        B

=== 设置日期为索引 ===
             value category
date
2023-01-01     67        A
2023-01-02     23        B
2023-01-03     45        A
2023-01-04     89        B
2023-01-05     12        A
2023-01-06     34        B

=== 每小时的时间序列 ===
                 timestamp  visitors
0  2023-01-01 08:00:00      25
1  2023-01-01 09:00:00      41
2  2023-01-01 10:00:00      77
3  2023-01-01 11:00:00      12
4  2023-01-01 12:00:00      58
5  2023-01-01 13:00:00      33
6  2023-01-01 14:00:00      45
7  2023-01-01 15:00:00      67
8  2023-01-01 16:00:00      29
9  2023-01-01 17:00:00      51
10 2023-01-01 18:00:00      44
11 2023-01-01 19:00:00      36
12 2023-01-01 20:00:00      28
13 2023-01-01 21:00:00      62
14 2023-01-01 22:00:00      19
15 2023-01-01 23:00:00      73
16 2023-01-02 00:00:00      41
17 2023-01-02 01:00:00      55
18 2023-01-02 02:00:00      38
19 2023-01-02 03:00:00      27
20 2023-01-02 04:00:00      49
21 2023-01-02 05:00:00      63
22 2023-01-02 06:00:00      34
23 2023-01-02 07:00:00      56

Code-Erklärung:

  • Ein DatetimeIndex kann direkt als Index eines DataFrame verwendet werden.
  • DataFrames mit einem Datumsindex unterstützen umfangreiche Zeitreihenoperationen, wie z. B. Resampling und rollierende Berechnungen.
  • freq='H'Daten auf Stundenebene können generiert werden, geeignet für Szenarien wie Loganalyse.

Beispiel 3: Zeitzone und closed-Parameter

Beispiel

import pandas as pd

# 1. Verwenden Sie den Parameter tz, um die Zeitzone anzugeben
print("=== Datumsbereich mit Zeitzone ===")
dates_tz = pd.date_range(start='2023-01-01', periods=3, freq='D', tz='Asia/Shanghai')
print(dates_tz)
print(f"Zeitzone: {dates_tz.tz}")

# 2. UTC-Zeitzone verwenden
print("n=== UTC-Zeitzone ===")
dates_utc = pd.date_range(start='2023-01-01', periods=3, freq='D', tz='UTC')
print(dates_utc)

# 3. Verwende den Parameter closed, um die Intervall-Inklusivität zu steuern
print("n=== Vergleich des Parameters closed ===")
print("closed=None (Standard, beide Enden inklusive):", pd.date_range('2023-01-01', '2023-01-03', freq='D', closed=None))
print("closed='left':", pd.date_range('2023-01-01', '2023-01-03', freq='D', closed='left'))
print("closed='right':", pd.date_range('2023-01-01', '2023-01-03', freq='D', closed='right'))

# 4. Verwende den Parameter normalize, um die Zeit zu normalisieren
print("n=== normalize-Parameter ===")
dates_with_time = pd.date_range(start='2023-01-01 14:30:00', periods=3, freq='H')
print("Vor der Normalisierung:", dates_with_time)

dates_normalized = pd.date_range(start='2023-01-01 14:30:00', periods=3, freq='H', normalize=True)
print("Nach der Normalisierung:", dates_normalized)

Ausgabe:

=== 带时区的日期范围 ===
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'], dtype='datetime64[ns, Asia/Shanghai]')
时区: Asia/Shanghai

=== UTC 时区 ===
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'], dtype='datetime64[ns, UTC]')

=== closed 参数对比 ===
closed=None (默认, 两端都闭): DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'])
closed='left': DatetimeIndex(['2023-01-01', '2023-01-02'])
closed='right': DatetimeIndex(['2023-01-02', '2023-01-03'])

=== normalize 参数 ===
归一化前: DatetimeIndex(['2023-01-01 14:30:00', '2023-01-01 15:30:00', '2023-01-01 16:30:00'])
归一化后: DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'])

Code-Erklärung:

  • tzDer Parameter kann die Zeitzone angeben, was sehr nützlich ist, wenn Daten über Zeitzonen hinweg verarbeitet werden.
  • closedDer Parameter kann die Inklusivität des Datumsintervalls steuern, wobei standardmäßig beide Enden eingeschlossen sind.
  • normalize=TrueNormalisiert Uhrzeiten auf Mitternacht, wodurch Daten bequem nach Datum aggregiert werden können.

Hinweise

Wichtige Hinweise:

  • Sie müssen angebenstartundend, oder geben Sie anstartundperiods, oder geben Sie anendundperiods, aber Sie können nicht nur eines gleichzeitig angeben.
  • Bei Frequenzabkürzungen wird zwischen Groß- und Kleinschreibung unterschieden; zum Beispiel steht 'D' für Tag, und 'd' führt zu einem Fehler.
  • Stellen Sie bei der Verarbeitung von Zeitzonendaten sicher, dass alle Datumsangaben eine einheitliche Zeitzone verwenden; andernfalls können unerwartete Ergebnisse auftreten.
  • Achten Sie beim Generieren einer großen Anzahl von Datumsangaben (z. B. Daten über mehrere Jahre) auf die Speichernutzung.

Pandas 通用函数Pandas Häufige Funktionen

Andere Erweiterungen