Pandas的通用时间序列是不规则的,即时间序列的频率是不固定的。然而经常有需要处理固定频率的场景,如每天、每月等

因此,Pandas还提供了一整套标准的时间序列频率和工具用于重新采样、推断频率及生成固定频率的数据范围

1 日期范围

Pandas的通用时间序列是不规则的,即时间序列的频率是不固定的。然而经常有需要处理固定频率的场景,如每天、每月等。使用pd.date_range函数可以创建指定长度的DatetimeIndex

date_range函数创建DatetimeIndex索引

时间查询使用索引 时间范围索引_python

index = pd.date_range('2018-12-28','2019-1-10')
index

 在默认情况下,产生的DatetimeIndex索引的间隔为天,如果只传递一个起始或者结束如期,则必须传递一个用于生成范围的数字

date_range中指定开始日期和长度

index = pd.date_range(start =  '2019-5-28',periods = 6)
index

date_range中指定结束日期和长度

index = pd.date_range(end = '2019-5-28',periods = 6)
index

2 频率和移位

 pandas中的频率是由一个基础频率和一个乘数组成的。基础频率通常以一个字符串别名表示,比如”H”表示每小时。对于每个基础频率,都有一个被称为日期偏移量的对象与之对应。可以通过实例化日期偏移量来创建某种频率:在基础频率前面放上一个整数即可创建偏移量的倍数

 基础时间序列频率(部分)

时间查询使用索引 时间范围索引_python_02

freq设置频率‘M

index = pd.date_range('2018-12-28','2019-3-10',freq = 'M')
index

 

时间查询使用索引 时间范围索引_时间查询使用索引_03

freq设置频率‘2H

 

时间查询使用索引 时间范围索引_信息可视化_04

index = pd.date_range(start =  '2019-5-28',periods = 4,freq = '2H')
index

 设置频率字符串

时间查询使用索引 时间范围索引_数据分析_05

index = pd.date_range(start =  '2019-5-28',periods = 4,freq = '2H15T15S')
index

 移位”是指将日期按时间向前或向后移动。Series和DataFrame都有一个shift方法用于简单的前向或后向移位,而不改变索引

wdate = pd.Series(np.random.randn(4),index = pd.date_range('2019/1/1',periods = 4,freq = 'M'))
print(wdate)
wdate.shift(2)

这种单纯的移动不会修改索引,而是使部分数据被丢弃。如果在shift方法中传入频率参数,这样就是修改索引了

shift方法中传入频率参数修改索引

wdate.shift(2,freq = 'D')

3 时期

时期表示的是时间区间,如数天、数月或数年等。Period可以创建时期型的数据,传入字符串、整数或频率即可

利用period可以创建时期型数据

w = pd.Period(2019,freq = 'A-DEC')
print(w)
print(w+2)

PeriodIndex索引的用法

类似于pd.date_range,pd.period_range函数可以创建日期范围,PeriodIndex索引同样可以构造Series或DateFrame

wdate = pd.period_range('2019/1/1','2019/6/1',freq = 'M')
pd.Series(np.arange(6),index = wdate)

Period和PeriodIndex对象可以通过asfreq方法转换频

p = pd.Period(2019,freq = 'A-FEB')
print(p.asfreq('M',how = 'start'))
print(p.asfreq('M',how = 'end'))

利用to_period方法可以将由时间戳索引的时间序列数据转换为以时期为索引

日期数据的转换

时间查询使用索引 时间范围索引_时间查询使用索引_06

w = pd.date_range('2019/1/1','2019/6/1',freq = 'M')
y = pd.Series(np.arange(5),index = w)
print(y)
ps = y.to_period()
print(ps)