- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
进行金融数据分析或者量化研究时,总避免不了时间序列数据的处理,时间序列是指在一定时间内按时间顺序测量的某个变量的取值序列。常见的时间序列数据有一天内随着时间变化的温度序列,又或者交易时间内不断波动的股票价格序列。Pandas也因其强大的时序处理能力而被广泛应用于金融数据分析,这篇文章为大家介绍一下Pandas中的时间序列处理,所使用的数据是上证指数
2022年的行情数据。
时间相关的数据类型
Pandas时序处理中最常见的两种数据类型为datetime和timedelta。一个datetime可以如下图所示:
datetime顾名思义就是既有日期date也有时间time,表示一个具体的时间点(时间戳)。timedelta则表示两个时间点之间的差,比如2022-01-01和2022-01-02之间的timedelta即为一天,相信并不难理解。
将时间列转换为时间格式
大多数时候,我们是从csv文件中导入数据,此时Dataframe中对应的时间列是字符串的形式,如下:
In[5]:data.trade_date.head()
Out[5]:
01234Name:trade_date,dtype:object
运用pd.to_datetime(),可以将对应的列转换为Pandas中的datetime64类型,便于后期的处理
In[11]:data[trade_date]=pd.to_datetime(data.trade_date)In[12]:data.trade_date.head()
Out[12]:
02022-01-02
12022-01-03
22022-01-04
32022-01-07
42022-01-08
Name:trade_date,dtype:datetime64[ns]
时间序列的索引时间序列中索引和Pandas普通的索引类似,大多时候调用.loc[index,columns]进行相应的索引,直接上代码看看
在时序数据处理过程中,时常需要实现下述需求:
求某个日期对应的星期数(2022-06-05是第几周)
判断一个日期是周几(2022-01-01是周几)
判断某一日期是第几季度(2022-07-08属于哪个季度)
当数据中的时间列(本数据中为trade_date列)已经转换为datetime64格式时,仅需调用.dt接口,即可快速求得想要的结果,下表中列出了.dt接口所提供的常见属性:
具体演示一下(下面仅显示2022-01-02的信息)
Resample
翻译过来是重采样的意思,官方文档中是这么描述resample的
resample()isatime-basedgroupby
翻译过来就是基于时间的groupby操作,我个人认为这是Pandas时间序列处理中最重要的功能,也是本文的重中之重。
根据采样是从低频到高频还是从高频到低频可以分为升采样和降采样两种方
式,先来看看降采样是啥
降采样
以一个实例来引入,我们使用的数据是上证指数2022年的日级别数据,如果现在想求每季度的平均收盘价,应该怎么操作呢?
从日级别数据求季度级别数据,是从高频到低频的聚合操作,其实就类似于groupby按季度进行操作,用resample来写是这样子
其中Q是以季度为频率进行采样,on指定datetime列(如果索引为Datetimeindex,则on不需要指定,默认依据索引进行降采样)。整个过程图解如下:
整个过程其实就是一个groupby过程:
?对原有的数据按照指定的频率进行切分,分到不同的group中
?对不同的group执行操作
?整合操作结果
其中,切分的频率可以为任何时间频率,可以为季度Q、月度M、星期W、N天ND,也可以为时H、分T,固然,如果切分后的频率小于原有的时间频率,就是
我们下面要讲的升采样。
?升采样
当采样的频率低于原有的频率时,即为升采样。升采样是对原有的时间粒度更为细粒度的划分,所以升采样时会产生缺失值。下面取2022-01-02至2022-01-03的数据按照6H的频率演示一下:
对resample后的结果应用.asfreq()会返回新频率下的结果。可以看到升采样后产生了缺失值。如果想要填充缺失值可以采用向后填充.bfill()或者向前填充.ff
文档评论(0)