添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
(14)Python初入坑之时间序列重采样

(14)Python初入坑之时间序列重采样

时间序列的重采样是指的,从一个频率到另一个频率:降采样,升采样,采样时间点变化。降采样就是比如之前是每天的频率到每月的频率,升采样例如每月的频率到每天,采样时间点变化例如之前是每周五采样,现在需要改成每周三。

重采样

首先我们定义一个时间序列的Series。

现在的这个时间序列Series是按照天进行采样的,一共有60天。那如果我们要改成按照月份进行采样的呢?我们需要使用resample()进行重采样。

我们分月份进行采样,然后求月内的均值。事实上重采样,就相当于groupby,只不过是根据月份这个period进行分组。默认情况下,这样的分组,右边是包含的,即 ] 。也就是左开右闭,( ] 。如果我们要写成左闭右开,添加参数 closed='left' 即可。

下面介绍一下OHLC重采样 ,这是在金融股票之中常用到的重采样,包括open开盘价,high最高价,low最低价,close收盘价。

这样我们可以看到10月份,最开始和结尾的数据,以及最大和最小的数据。

之前我们讲到resample其实就是另一种形式的groupby,那下面我们就使用groupby来给时间序列分组,看怎么操作。

上面是先把x中的month或者week提取出来,再根据其分组,就均值。就会返回一年中第几个月或者第几个星期的均值。

升采样和插值

首先我们定义一个dataframe。2行4列,行索引是时间序列,频率为周。

下面我们想重采样为以天为频率。需要使用resample和asfreq() ,asfreq可以把dataframe中的数据视同为时间序列进行处理。

或者直接使用asfreq来改变其频率。但是asfreq不如resample的功能和范围强大。

以上没有指定数据的部分,都被自动填充为NaN值,那如果我们需要用特定的值来填充呢?例如,使用空值之前的数据进行填充,这个时候就需要用到pad() 。

也可以使用空值后面的值进行填充,这个时候需要使用bfill() 。

读取为时间序列

如果有一个dateframe,其中有一列是字符型的时间,我们如何把它读取成时间序列呢?例如我们以空难数据为例。

空难数据中有一列是date,我们要把这列设置为索引,并且解析为时间序列。则使用parse_dates=True。解析成为时间序列。下面我们就可以根据时间,对某些列进行重采样了。

例如我们想知道每年的遇难总人数,那就根据Fatalities进行重采样,频率为年,就是A,然后进行求和。

这节内容到此结束~

发布于 2018-04-21 12:33

文章被以下专栏收录