介绍四类时间变量:
名称 | 描述 | 元素类型 | 创建方式 |
---|---|---|---|
Date times (时间点/时刻) | 描述特定日期或时间点 | Timestamp | to_datetime或date_range |
Time spans (时间段/时期) | 由时间点定义的一段时期 | Period | Period或period_range |
Date offsets (相对时间差) | 一段时间的相对大小(与夏/冬令时无关) | DateOffset | DateOffset |
Time deltas (绝对时间差) | 一段时间的绝对大小(与夏/冬令时有关) | Timedelta | to_timedelta或timedelta_range |
时序的创建
时间点的创建
- to_datetime方法:
1)Pandas在时间点建立的输入格式上,自由度很高,常见的时间格式均可。
2)一旦所写的时间格式出现报错,可以用format函数强制转换。
3)可以通过列表,将时间点转换为索引。
4)可以将DataFrame形式的时间,用to_datetime转换称Series的时间点。 - 时间精度与范围限制:
1)Timestamp的时间精度最小到ns
2)Timestamp的范围只有大约584年。 - date_range方法:
1)重要参数:
start:开始时间;
end:终止时间;
periods:时间点个数;
freq:间隔方法;
其中freq参数有许多选项,下面将常用部分罗列如下:
符号 | D/B | W | M/Q/Y | BM/BQ/BY | MS/QS/YS | BMS/BQS/BYS | H | T | S |
---|---|---|---|---|---|---|---|---|---|
描述 | 日/工作日 | 周 | 月末 | 月/季/年末日 | 月/季/年末工作日 | 月/季/年初日 | 小时 | 分钟 | 秒 |
DateOffset对象
- DataOffset 与 Timedelta 的区别:
1)Timedelta绝对时间差的特点指无论是冬令时还是夏令时,增减1day都只计算24小时;
2)DataOffset相对时间差指,无论一天是23\24\25小时,增减1day都与当天相同的时间保持一致;
3)只要把tz(time zone)去除就可以不用管它了,两者保持一致,除非要使用到时区变换。 - 增减一段时间:
1)DateOffset的可选参数包括years/months/weeks/days/hours/minutes/seconds。 - 序列的offset操作
利用apply函数;
直接使用对象加减;
定制offset,可以指定weekmask和holidays参数; - 各类常用offset对象
freq | D/B | W | (B)M/(B)Q/(B)Y | (B)MS/(B)QS/(B)YS | H | T | S | C |
---|---|---|---|---|---|---|---|---|
offset | DateOffset/BDay | Week | (B)MonthEnd/(B)QuarterEnd/(B)YearEnd | (B)MonthBegin/(B)QuarterBegin/(B)YearBegin | Hour | Minute | Second | CDay(定制工作日) |
时序的索引及属性
时间点的属性
- 采用dt对象可以轻松获得关于时间的信息
- 利用strftime可重新修改时间格式
- 对于datetime对象可以直接通过属性获取信息
重采样
resample对象的基本操作
- 采样频率一般设置为上面提到的offset字符
- resample函数,可以看做时序版本的groupby函数
采样聚合
r = df_r.resample('3T')
r['A'].agg([np.sum, np.mean, np.std])
#类似地,可以使用函数/lambda表达式
r.agg({'A': np.sum,'B': lambda x: max(x)-min(x)})
采样组的迭代
采样组的迭代和groupby迭代完全类似,对于每一个组都可以分别做相应操作
窗口函数
Rolling
- 常用聚合:
1)所谓rolling方法,就是规定一个窗口,它和groupby对象一样,本身不会进行操作,需要配合聚合函数才能计算结果。
2)min_periods参数是指需要的非缺失数据点数量阀值。
3)count/sum/mean/median/min/max/std/var/skew/kurt/quantile/cov/corr都是常用的聚合函数。 - rolling的apply聚合:
使用apply聚合时,只需记住传入的是window大小的Series,输出的必须是标量即可,比如如下计算变异系数。 - 基于时间的rolling:
可选closed=‘right’(默认)‘left’‘both’'neither’参数,决定端点的包含情况。
Expanding
- expanding函数:
1)普通的expanding函数等价与rolling(window=len(s),min_periods=1),是对序列的累计计算。
2)apply方法也是同样可用的。 - 几个特别的Expanding类型函数:
1)cumsum/cumprod/cummax/cummin都是特殊expanding累计计算方法。
2)shift/diff/pct_change都是涉及到了元素关系。
①shift是指序列索引不变,但值向后移动;
②diff是指前后元素的差,period参数表示间隔,默认为1,并且可以为负;
③pct_change是值前后元素的变化百分比,period参数与diff类似