全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1170 1
2020-09-16

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

  

类别

  

函数

作用或参数说明

构造或生成时间序列

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)

15.png

  如果脚本修改为:print(students['height'].resample('H',closed='right').mean())

16.png


当然标签一样可以选择左、右区间的边界,这里既然是右闭,那就以右边界为标签吧,脚本可以写为:

print(students['height'].resample('H', label='right', closed='right').mean())

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

【脚本】

print(students['height'].resample('Q-DEC', label='right', closed='right').ffill())

【结果】

17.png


也可以使用参数为A的操作


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

【脚本】

print(students['height'].resample('A').ohlc())

【结果】

18.png

【说明】

O:      open

H:      high

L:       low

C:      close


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-12-15 09:11:35
# 获取某时间的最后一天(法1)
from dateutil.relativedelta import relativedelta
last_date_of_month = datetime(mydate.year, mydate.month, 1) + relativedelta(months=1, days=-1)
# 获取某时间的最后一天(法2)
from datetime import datetime
from dateutil.relativedelta import relativedelta

date_in_feb = datetime.datetime(2013, 2, 21)
print datetime.datetime(2013, 2, 21) + relativedelta(day=31)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群