Python +pandas +时间采样

前几天学了时间序列构造与索引转换的相关操作,详情如下:

类别 函数 作用或参数说明
构造或生成时间序列 Datetime(2001,1,1) 将字符串转成时点类型数值
Pd.to_datetime(‘2000-02-02’)
Datetime.strptime(’03-01-2014年’,’%m-%d-%Y年’) 将不规则字符串转成时点类型数值
Datetime.strftime(datetime.now(),’today is : %Y-%m-%d’) 将时点类型数值转成字符串
DataFrame[‘birthday’].apply(str)
Pd.date_range(‘20200101’,period=6,freq=’M’) 按要求生成一个指定间隔的时点类型数值Freq=’M/MS/2M/1h30min/90T’
peariodIndex(values,freq=’M’) 按要求生成一个指定序列(不一定间隔相同)的时点类型数值
时间索引转换 Student.to_peariod(‘A-Aug’) 将一个时点索引按指定格式分成多个时期索引数值
Student.to_timestamp() 将时期索引数值转换为时点索引数值
Student.asfreq(freq=’D’,how=end) 时点索引与时期索引相互转换

今天学习时间采样,个人认为使用“时间索引转换函数+统计语句”也可以解决今天的部分问题,但是今天的采样函数resample()更快捷,更灵活,本领还更高。

1、以月为单位统计学生的个数

相当于按某格式转换时间索引,但转换时间格式后一般需要另存一张dataframe,而resample()却不需要,能直接使用。
【脚本】:
print(students[‘ID’].resample(‘M’, kind=‘period’).count())

【结果】
2000-09 1

2007-07 0
2007-08 1

【说明】
1、 这个采样相当于分组,但也不完全相同于分组,这里会多出很多你数据中原本不存在的组,比如2007-07这个月份在原数据中其实是不存在的,但按月采样后,却是从最小月到最大月的全时段分组。
2、 既然分组会产生空值组,那么怎样处理呢?
填充:以最近一个值向下填充
如:print(students[‘height’].resample(‘M’).ffill())
注意这里不再加kind=’period’;也可以增加limit=2,即
print(students[‘height’].resample(‘M’).ffill(limit=2))

2、以小时为单位统计学生信息

【脚本】
print(students[‘height’].resample(‘H’).ffill(limit=1))
【结果】相当于[01:00:00,02:00:00)

Python +pandas +时间采样_第1张图片

如果脚本修改为:print(students[‘height’].resample(‘H’,closed=‘right’).mean())
结果如下:相当于“(01:00:00,02:00:00]
Python +pandas +时间采样_第2张图片

当然标签一样可以选择左、右区间的边界,这里既然是右闭,那就以右边界为标签吧,脚本可以写为:
print(students[‘height’].resample(‘H’, label=‘right’, closed=‘right’).mean())

3、以季度为单位采样并填充

【脚本】
print(students[‘height’].resample(‘Q-DEC’, label=‘right’, closed=‘right’).ffill())
【结果】
Python +pandas +时间采样_第3张图片

也可以修改参数为A

4、类似股票市场的采样,采集该时段内开盘值、最大值、最小值、收盘值

【脚本】
print(students[‘height’].resample(‘A’).ohlc())
【结果】
Python +pandas +时间采样_第4张图片

【说明】
O: open
H: high
L: low
C: close

你可能感兴趣的:(项目,python)