Fonction Pandas pd.date_range()
pd.date_range()est utilisée dans la bibliothèque Pandas pourgénérer des plages de datesfonction. Elle crée un DatetimeIndex contenant des dates consécutives, couramment utilisé pour créer, indexer et aligner des données de séries temporelles.
Dans l'analyse des séries temporelles, il est souvent nécessaire de générer des séquences de dates avec une fréquence fixe, telles que des données quotidiennes, mensuelles ou annuelles. pd.date_range() fournit des paramètres flexibles pour répondre à diverses exigences de fréquence.
Définition du terme: date_rangeCela signifie « plage de dates », c'est-à-dire générer un ensemble de dates consécutives.
Syntaxe de base et paramètres
pd.date_range()est une fonction de premier niveau de la bibliothèque Pandas, utilisée pour générer des index datetime avec une fréquence spécifiée.
Format de syntaxe
pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None)
Description du paramètre
| Paramètre | Type | Requis | Description | Valeur par défaut |
|---|---|---|---|---|
| start | Chaîne de caractères ou datetime | Optional | Date de début. | Aucune |
| end | Chaîne de caractères ou datetime | Optional | Date de fin. | Aucune |
| periods | Integer | Optional | Nombre de dates à générer. Utilisez deux quelconques parmi start, end et periods. | Aucune |
| freq | Chaîne ou DateOffset | Optional | Fréquence : 'D' (jour), 'H' (heure), 'M' (fin de mois), 'MS' (début de mois), 'Y' (fin d'année), 'W' (semaine), etc. | 'D' |
| tz | String | Optional | Nom du fuseau horaire, par ex. 'UTC', 'Asia/Shanghai'. | Aucune |
| normalize | Boolean | Optional | Si True, normalise les heures à minuit. | False |
| name | String | Optional | Nom du DatetimeIndex résultant. | Aucune |
| closed | String | Optional | Inclusivité de l'intervalle : 'left', 'right', None (par défaut, les deux bornes incluses). | Aucune |
Description de la valeur de retour
- Valeur de retour: Renvoie un objet DatetimeIndex contenant des horodatages consécutifs.
- Effet: Génère une séquence de dates en fonction de la date de début, de la date de fin et de la fréquence spécifiées.
Exemples
Maîtrisons à fond, à travers une série d'exemples du plus simple au plus complexe,pd.date_range()son utilisation.
Exemple 1 : Utilisation de base - Génération d'une plage de dates
Exemple
# 1. Utilisez les paramètres start et end pour générer une plage de dates (la fréquence par défaut est quotidienne)
print("=== Du 2023-01-01 au 2023-01-10 ===")
dates = pd.date_range(start='2023-01-01', end='2023-01-10')
print(dates)
print(f"Type : {type(dates)}")
print(f"Type de données : {dates.dtype}")
# 2. Utilisez le paramètre periods pour spécifier le nombre à générer
print("n=== Générer 7 jours de dates ===")
week_dates = pd.date_range(start='2023-01-01', periods=7)
print(week_dates)
# 3. Utilisez le paramètre freq pour spécifier la fréquence
print("n=== Une date par semaine (freq='W') ===")
weekly_dates = pd.date_range(start='2023-01-01', periods=5, freq='W')
print(weekly_dates)
# 4. Date au début de chaque mois (freq='MS' = début du mois)
print("n=== Début du mois (freq='MS') ===")
monthly_dates = pd.date_range(start='2023-01-01', periods=6, freq='MS')
print(monthly_dates)
# 5. Date à la fin de chaque année (freq='YE' = fin d'année)
print("n=== Fin d'année (freq='YE') ===")
yearly_dates = pd.date_range(start='2023-01-01', periods=3, freq='YE')
print(yearly_dates)
Sortie :
=== 从 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')
Explication du code :
pd.date_range()Génère une séquence de dates avec une fréquence quotidienne par défaut.freqLe paramètre prend en charge plusieurs abréviations de fréquence : 'D' (jour), 'W' (semaine), 'M' (fin de mois), 'MS' (début de mois), 'Y' (fin d'année), 'H' (heure), etc.- L'objet renvoyé est un DatetimeIndex, qui peut être directement utilisé comme index d'une Series ou d'un DataFrame.
Exemple 2 : Génération de données de séries temporelles
Créer un DataFrame avec un index de dates pour l'analyse de séries temporelles.
Exemple
import numpy as np
# 1. Créer un DataFrame avec un index de dates
print("=== Créer une série temporelle simple ===")
# Générer 30 jours de dates
date_index = pd.date_range(start='2023-01-01', periods=30, freq='D')
# Créer un DataFrame
df = pd.DataFrame({
'date': date_index,
'value': np.random.randint(10, 100, size=30), # Valeurs aléatoires
'category': ['A', 'B'] * 15 # Catégories alternées
})
print(df.head(10))
# 2. Définir la date comme index
print("n=== Définir la date comme index ===")
df_indexed = df.set_index('date')
print(df_indexed.head())
# 3. Générer des données horaires (pour l'analyse des logs)
print("n=== Série temporelle horaire ===")
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)
Sortie :
=== 创建一个简单的时间序列 ===
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
Explication du code :
- Un DatetimeIndex peut être directement utilisé comme index d’un DataFrame.
- Les DataFrames avec un index de dates prennent en charge de riches opérations sur les séries temporelles, telles que le rééchantillonnage et les calculs glissants.
freq='H'Des données à granularité horaire peuvent être générées, adaptées à des scénarios tels que l’analyse de logs.
Exemple 3 : Fuseau horaire et paramètre closed
Exemple
# 1. Utiliser le paramètre tz pour spécifier le fuseau horaire
print("=== Plage de dates avec fuseau horaire ===")
dates_tz = pd.date_range(start='2023-01-01', periods=3, freq='D', tz='Asia/Shanghai')
print(dates_tz)
print(f"Fuseau horaire : {dates_tz.tz}")
# 2. Utiliser le fuseau horaire UTC
print("n=== fuseau horaire UTC ===")
dates_utc = pd.date_range(start='2023-01-01', periods=3, freq='D', tz='UTC')
print(dates_utc)
# 3. Utiliser le paramètre closed pour contrôler l'inclusion des intervalles
print("n=== Comparaison du paramètre closed ===")
print("closed=None (par défaut, les deux extrémités incluses) :", 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. Utiliser le paramètre normalize pour normaliser le temps
print("n=== paramètre normalize ===")
dates_with_time = pd.date_range(start='2023-01-01 14:30:00', periods=3, freq='H')
print("Avant normalisation :", dates_with_time)
dates_normalized = pd.date_range(start='2023-01-01 14:30:00', periods=3, freq='H', normalize=True)
print("Après normalisation :", dates_normalized)
Sortie :
=== 带时区的日期范围 === 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'])
Explication du code :
tzLe paramètre peut spécifier le fuseau horaire, ce qui est très utile lors du traitement de données entre fuseaux horaires.closedLe paramètre peut contrôler l'inclusion de l'intervalle de dates, les deux bornes étant incluses par défaut.normalize=TrueNormalise les horodatages à minuit, ce qui facilite l'agrégation des données par date.
Notes
Remarques importantes :
- Vous devez spécifier
startetend, ou spécifierstartetperiods, ou spécifierendetperiods, mais vous ne pouvez pas spécifier un seul à la fois.- Les abréviations de fréquence sont sensibles à la casse ; par exemple, 'D' signifie jour, et 'd' lèvera une erreur.
- Lors du traitement des données de fuseau horaire, assurez-vous que toutes les dates utilisent un fuseau horaire uniforme ; sinon, des résultats inattendus peuvent survenir.
- Lors de la génération d'un grand nombre de dates (par ex., des données sur plusieurs années), faites attention à l'utilisation de la mémoire.
Autres extensions
Fonctions courantes de Pandas