一、时序的创建
1. 四类时间变量
现在理解可能关于③和④有些困惑,后面会作出一些说明
名称 | 描述 | 元素类型 | 创建方式 |
---|---|---|---|
① Date times(时间点/时刻) | 描述特定日期或时间点 | Timestamp | to_datetime或date_range |
② Time spans(时间段/时期) | 由时间点定义的一段时期 | Period | Period或period_range |
③ Date offsets(相对时间差) | 一段时间的相对大小(与夏/冬令时无关) | DateOffset | DateOffset |
④ Time deltas(绝对时间差) | 一段时间的绝对大小(与夏/冬令时有关) | Timedelta | to_timedelta或timedelta_range |
2. 时间点的创建
(a)to_datetime方法
Pandas在时间点建立的输入格式规定上给了很大的自由度,下面的语句都能正确建立同一时间点
此时可利用format参数强制匹配
使用列表可以将其转为时间点索引
如果列已经按照时间顺序排好,则利用to_datetime可自动转换
(b)时间精度与范围限制
Timestamp的精度远远不止day,可以最小到纳秒ns
它带来范围的代价就是只有大约584年的可用时间点
c)date_range方法
一般来说,start/end/periods(时间点个数)/freq(间隔方法)是该方法最重要的参数,给定了其中的3个,剩下的一个就会被确定
其中freq参数有许多选项,下面将常用部分罗列如下:
符号 | D/B | W | M/Q/Y | BM/BQ/BY | MS/QS/YS | BMS/BQS/BYS | H | T | S | |
---|---|---|---|---|---|---|---|---|---|---|
描述 | 日/工作日 | 周 | 月末 | 月/季/年末日 | 月/季/年末工作日 | 月/季/年初日 | 月/季/年初工作日 | 小时 | 分钟 | 秒 |
bdate_range是一个类似与date_range的方法,特点在于可以在自带的工作日间隔设置上,再选择weekmask参数和holidays参数
它的freq中有一个特殊的'C'/'CBM'/'CBMS'选项,表示定制,需要联合weekmask参数和holidays参数使用
例如现在需要将工作日中的周一、周二、周五3天保留,并将部分holidays剔除
3. DateOffset对象
(a)DataOffset与Timedelta的区别
Timedelta绝对时间差的特点指无论是冬令时还是夏令时,增减1day都只计算24小时
DataOffset相对时间差指,无论一天是23\24\25小时,增减1day都与当天相同的时间保持一致
例如,英国当地时间 2020年03月29日,01:00:00 时钟向前调整 1 小时 变为 2020年03月29日,02:00:00,开始夏令时
把tz(time zone)去除就可以,两者保持一致,除非要使用到时区变换
(c)各类常用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(定制工作日) |
(d)序列的offset操作
利用apply函数
直接使用对象加减
定制offset,可以指定weekmask和holidays参数(思考为什么三个都是一个值)
二、时序的索引及属性
1. 索引切片
合法字符自动转换为时间点
2. 子集索引
支持混合形态索引
3. 时间点的属性
采用dt对象可以轻松获得关于时间的信息
利用strftime可重新修改时间格式
对于datetime对象可以直接通过属性获取信息
三、重采样
所谓重采样,就是指resample函数,它可以看做时序版本的groupby函数
1. resample对象的基本操作
采样频率一般设置为上面提到的offset字符
2. 采样聚合
类似地,可以使用函数/lambda表达式
3. 采样组的迭代
采样组的迭代和groupby迭代完全类似,对于每一个组都可以分别做相应操作
四、窗口函数
下面主要介绍pandas中两类主要的窗口(window)函数:rolling/expanding
1. Rolling
(a)常用聚合
所谓rolling方法,就是规定一个窗口,它和groupby对象一样,本身不会进行操作,需要配合聚合函数才能计算结果
min_periods参数是指需要的非缺失数据点数量阀值
count/sum/mean/median/min/max/std/var/skew/kurt/quantile/cov/corr都是常用的聚合函数
(b)rolling的apply聚合
使用apply聚合时,只需记住传入的是window大小的Series,输出的必须是标量即可,比如如下计算变异系数
(c)基于时间的rolling
可选closed='right'(默认)\'left'\'both'\'neither'参数,决定端点的包含情况
2. Expanding
(a)expanding函数
普通的expanding函数等价与rolling(window=len(s),min_periods=1),是对序列的累计计算
apply方法也是同样可用的
(b)几个特别的Expanding类型函数
cumsum/cumprod/cummax/cummin都是特殊expanding累计计算方法
shift/diff/pct_change都是涉及到了元素关系
①shift是指序列索引不变,但值向后移动
②diff是指前后元素的差,period参数表示间隔,默认为1,并且可以为负
③pct_change是值前后元素的变化百分比,period参数与diff类似