Función Pandas pd.date_range()

Pandas 通用函数Funciones comunes de Pandas


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

import pandas as pd

# 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:

  1. pd.date_range()Por defecto se genera una secuencia de fechas con frecuencia diaria.
  2. 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.
  3. 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 pandas as pd
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

import pandas as pd

# 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 especificarstartyend, 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.

Pandas 通用函数Funciones comunes de Pandas

Otras extensiones