Función Pandas pd.date_range()
pd.date_range()Es una función de la biblioteca Pandas utilizada paragenerar rangos de fechas. Puede crear un DatetimeIndex que contiene fechas consecutivas, utilizado a menudo para la creación, indexación y alineación de datos de series temporales.
En el análisis de series temporales, a menudo es necesario generar secuencias de fechas con una frecuencia fija, como datos diarios, mensuales o anuales. pd.date_range() proporciona parámetros flexibles para satisfacer diversas necesidades de frecuencia.
Significado del término: date_rangeSignifica "rango de fechas", es decir, genera un conjunto de fechas consecutivas.
Sintaxis básica y parámetros
pd.date_range()Es una función de nivel superior de la biblioteca Pandas, utilizada para generar un índice de fecha y hora con una frecuencia especificada.
Formato de sintaxis
pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None)
Descripción de parámetros
| Parámetro | Tipo | ¿Requerido? | Descripción | Valor por defecto |
|---|---|---|---|---|
| start | Cadena o datetime | Opcional | Fecha de inicio. | None |
| end | Cadena o datetime | Opcional | Fecha de fin. | None |
| periods | Entero | Opcional | Número de fechas a generar. Junto con start/end, elegir dos de tres. | None |
| freq | Cadena o DateOffset | Opcional | Frecuencia: 'D' (día), 'H' (hora), 'M' (fin de mes), 'MS' (inicio de mes), 'Y' (fin de año), 'W' (semana), etc. | 'D' |
| tz | Cadena | Opcional | Nombre de la zona horaria, como 'UTC', 'Asia/Shanghai'. | None |
| normalize | Valor booleano | Opcional | Si es True, normaliza la hora a la medianoche. | False |
| name | Cadena | Opcional | Nombre del DatetimeIndex generado. | None |
| closed | Cadena | Opcional | Extremos del intervalo: 'left', 'right', None (por defecto, ambos cerrados). | None |
Descripción del valor de retorno
- Valor de retorno: Devuelve un objeto DatetimeIndex que contiene fechas y horas consecutivas.
- Efecto: Genera una secuencia de fechas según la fecha de inicio, la fecha de fin y la frecuencia especificadas.
Ejemplos
Vamos a dominar por completo, mediante una serie de ejemplos de simples a complejos,pd.date_range()el uso de esta función.
Ejemplo 1: Uso básico - Generar un rango de fechas
Ejemplo
# 1. Usar los parámetros start y end para generar un rango de fechas (frecuencia predeterminada: día)
print("=== De 2023-01-01 a 2023-01-10 ===")
dates = pd.date_range(start='2023-01-01', end='2023-01-10')
print(dates)
print(f"Tipo: {type(dates)}")
print(f"Tipo de datos: {dates.dtype}")
# 2. Usar el parámetro periods para especificar la cantidad a generar
print("n=== Generar fechas de 7 días ===")
week_dates = pd.date_range(start='2023-01-01', periods=7)
print(week_dates)
# 3. Usar el parámetro freq para especificar la frecuencia
print("n=== Una fecha por semana (freq='W') ===")
weekly_dates = pd.date_range(start='2023-01-01', periods=5, freq='W')
print(weekly_dates)
# 4. Fecha de inicio de cada mes (freq='MS' = Month Start)
print("n=== Inicio de mes (freq='MS') ===")
monthly_dates = pd.date_range(start='2023-01-01', periods=6, freq='MS')
print(monthly_dates)
# 5. Fecha de fin de cada año (freq='YE' = Year End)
print("n=== Fin de año (freq='YE') ===")
yearly_dates = pd.date_range(start='2023-01-01', periods=3, freq='YE')
print(yearly_dates)
Resultado de la ejecución:
=== 从 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')
Tipo: <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')
Análisis del código:
pd.date_range()Por defecto se genera una secuencia de fechas con frecuencia diaria.freqEl parámetro admite varias abreviaturas de frecuencia: 'D' (día), 'W' (semana), 'M' (fin de mes), 'MS' (inicio de mes), 'Y' (fin de año), 'H' (hora), etc.- Lo que se devuelve es un objeto DatetimeIndex, que puede usarse directamente como índice de Series o DataFrame.
Ejemplo 2: Generar datos de series temporales
Crear un DataFrame con índice de fechas para el análisis de series temporales.
Ejemplo
import numpy as np
# 1. Crear un DataFrame con índice de fechas
print("=== Crear una serie temporal simple ===")
# Generar fechas de 30 días
date_index = pd.date_range(start='2023-01-01', periods=30, freq='D')
# Crear el DataFrame
df = pd.DataFrame({
'date': date_index,
'value': np.random.randint(10, 100, size=30), # Valores aleatorios
'category': ['A', 'B'] * 15 # Categorías alternas
})
print(df.head(10))
# 2. Establecer la fecha como índice
print("n=== Establecer la fecha como índice ===")
df_indexed = df.set_index('date')
print(df_indexed.head())
# 3. Generar datos por hora (para análisis de registros)
print("n=== Serie temporal por hora ===")
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)
Resultado de la ejecución:
=== 创建一个简单的时间序列 ===
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
Análisis del código:
- DatetimeIndex puede usarse directamente como índice de un DataFrame.
- Un DataFrame con índice de fechas admite numerosas operaciones de series temporales, como remuestreo, cálculos móviles, etc.
freq='H'Se pueden generar datos a nivel de hora, adecuados para escenarios como el análisis de registros.
Ejemplo 3: Zona horaria y parámetro closed
Ejemplo
# 1. Usar el parámetro tz para especificar la zona horaria
print("=== Rango de fechas con zona horaria ===")
dates_tz = pd.date_range(start='2023-01-01', periods=3, freq='D', tz='Asia/Shanghai')
print(dates_tz)
print(f"Zona horaria: {dates_tz.tz}")
# 2. Usar la zona horaria UTC
print("n=== Zona horaria UTC ===")
dates_utc = pd.date_range(start='2023-01-01', periods=3, freq='D', tz='UTC')
print(dates_utc)
# 3. Usar el parámetro closed para controlar los extremos del intervalo
print("n=== Comparación del parámetro closed ===")
print("closed=None (predeterminado, ambos extremos cerrados):", 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. Usar el parámetro normalize para normalizar la hora
print("n=== Parámetro normalize ===")
dates_with_time = pd.date_range(start='2023-01-01 14:30:00', periods=3, freq='H')
print("Antes de normalizar:", dates_with_time)
dates_normalized = pd.date_range(start='2023-01-01 14:30:00', periods=3, freq='H', normalize=True)
print("Después de normalizar:", dates_normalized)
Resultado de la ejecución:
=== 带时区的日期范围 === 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'])
Análisis del código:
tzEl parámetro puede especificar la zona horaria, lo cual resulta muy útil al procesar datos entre distintas zonas horarias.closedEl parámetro puede controlar los extremos abiertos o cerrados del intervalo de fechas; por defecto, ambos extremos están cerrados.normalize=TrueNormaliza la hora a la medianoche, lo que facilita la agregación de datos por fecha.
Notas importantes
Aviso importante:
- Debe especificar
startyend, o especificarstartyperiods, o especificarendyperiods; no se puede especificar únicamente uno de ellos al mismo tiempo.- Las abreviaturas de frecuencia distinguen entre mayúsculas y minúsculas; por ejemplo, 'D' significa día, mientras que 'd' generará un error.
- Al trabajar con datos de zona horaria, asegúrese de que todas las fechas usen una zona horaria uniforme; de lo contrario, pueden producirse resultados inesperados.
- Al generar una gran cantidad de fechas (como datos de varios años), preste atención al uso de memoria.
Otras extensiones
Funciones comunes de Pandas