在 pandas 中,有一个非常常用的函数 date_range,尤其是在处理时间序列数据时,这个函数的作用就是产生一个 DatetimeIndex,就是时间序列数据的索引。
pandas.
date_range
(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs) → pandas.core.indexes.datetimes.DatetimeIndex
返回一个固定频率的DatetimeIndex。
参数:
start:str 或 datetime-like,可选,默认值是None,表示日期的起点。
end:str 或 datetime-like,可选,默认值是None,表示日期的终点。
periods:int,可选,默认值是None,表示你要从和这个函数产生多少个日期索引值(要生成的周期数);如果是None的话,那么 start 和 end 必须不能为 None。
freq:str 或 DateOffset,默认 “D”,表示以自然日为单位,这个参数用来指定计时单位,比如 “5H”表示每隔5个小时计算一次。
名称 | 说明 | |
---|---|---|
B | 业务日频率 | |
C | 自定义业务日频率 | |
D | 日历天频率 | |
W | 每周一次的频率 | |
M | 月结束频率 | |
SM | 月结频次(15次、月末) | |
BM | 业务月末频率 |
|
CBM | 自定义业务月底频率 |
|
MS | 月开始频率 | |
SMS | 开始频率(1号、15号) | |
BMS | 业务月开始频率 |
|
CBMS | 自定义业务月开始频率 |
|
Q | 季度结束频率 | |
BQ | 业务季度结束频率 |
|
QS | 季度开始频 |
|
BQS | 季度开始频率 |
|
A, Y | 年底频率 | |
BA, BY | 业务年度结束频率 |
|
AS, YS | 年开始频 |
|
BAS, BYS | 业务年度开始频率 |
|
BH | 营业时间频率 |
|
H | 每小时的频率 | |
T, min | 每分钟的频率 |
|
S | 每秒频率 | |
L, ms | 毫秒 | |
U, us | 微秒 | |
N | 纳秒 |
tz:str 或 tzinfo,可选,返回本地化的DatetimeIndex的时区名称,例如' Asia/Hong_Kong '。默认情况下,生成的DatetimeIndex是与时区无关的。
normalize:bool,默认 False。如果为 True 的话,那么在产生时间索引值之前会先把 start 和 end 都转化为当日的午夜 0 点。
name:str,默认 None。给返回的时间索引指定一个名字。
closed:{None, ‘left’, ‘right’},可选。默认值为 None,表示 start 和 end 这个区间端点是否包含在区间内,可以有三个值,“left” 表示左闭右开区间,“right” 表示左开右闭区间,None 表示两边都是闭区间。
**kwargs:兼容性,对结果没影响。
import pandas as pd, numpy as np
# 创建时间序列(默认 freq="D")
time_index = pd.date_range(start="2020-03-01", end="2020-03-15")
print(time_index)
# 运行结果:
DatetimeIndex(['2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04',
'2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08',
'2020-03-09', '2020-03-10', '2020-03-11', '2020-03-12',
'2020-03-13', '2020-03-14', '2020-03-15'],
dtype='datetime64[ns]', freq='D')
# 创建 10 个时间序列
time_index02 = pd.date_range(start="2020-03-01", periods=10)
print(time_index02)
# 运行结果:
DatetimeIndex(['2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04',
'2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08',
'2020-03-09', '2020-03-10'],
dtype='datetime64[ns]', freq='D')
# 创建一个时间序列,步长 3 天
time_index03 = pd.date_range(start="2020-03-01", periods=10, freq="3D")
print(time_index03)
# 运行结果:
DatetimeIndex(['2020-03-01', '2020-03-04', '2020-03-07', '2020-03-10',
'2020-03-13', '2020-03-16', '2020-03-19', '2020-03-22',
'2020-03-25', '2020-03-28'],
dtype='datetime64[ns]', freq='3D')
# 创建一个时间序列,以分钟为步长
time_index04 = pd.date_range(start="2020-03-01", periods=10, freq="S")
print(time_index04)
# 运行结果:
DatetimeIndex(['2020-03-01 00:00:00', '2020-03-01 00:00:01',
'2020-03-01 00:00:02', '2020-03-01 00:00:03',
'2020-03-01 00:00:04', '2020-03-01 00:00:05',
'2020-03-01 00:00:06', '2020-03-01 00:00:07',
'2020-03-01 00:00:08', '2020-03-01 00:00:09'],
dtype='datetime64[ns]', freq='S')
data = np.random.randint(3000, 3010, 10)
print(data)
# 运行结果:
[3001 3005 3001 3009 3002 3008 3002 3000 3001 3003]
time_index05 = pd.Series(data, time_index04)
print(time_index05)
# 运行结果:
2020-03-01 00:00:00 3001
2020-03-01 00:00:01 3005
2020-03-01 00:00:02 3001
2020-03-01 00:00:03 3009
2020-03-01 00:00:04 3002
2020-03-01 00:00:05 3008
2020-03-01 00:00:06 3002
2020-03-01 00:00:07 3000
2020-03-01 00:00:08 3001
2020-03-01 00:00:09 3003
Freq: S, dtype: int32