加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

Pandas必备技能之“时间序列数据处理”

发布时间:2019-06-13 01:40:55 所属栏目:教程 来源:Little monster翻译整理
导读:时间序列数据Time Series Data是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况。 时间序列分析广泛应用于计量经济学模型中,通过寻找历史数据中某一现象的发展规律,对未来进行预测。 时间序列数据作为时间序

为了方便大家观察,把这段时间的日历附在下面,'2018-07-02'正好是星期一。

Pandas必备技能之“时间序列数据处理”

转换的思路是这样的,以日历中的周进行聚合,如'20180702'-'20180708',取该周期内,日线开盘价的第一个值作为周开盘价,日线最高价的最大值作为周最高价,日线最低价的最小值作为周最低价,日线收盘价的最后一个值作为周最收盘价,日线最高价的最大值作为周最高价,日线成交量的求和作为周成交量(手),如下图黄色方框所示。

Pandas必备技能之“时间序列数据处理”

我们可以通过.resample()【4】方法实现上述操作,对DataFrame和Series都适用。其中,参数rule设置需要转换成的频率,'1W'是一周。

具体转换的代码如下,日期默认为本周的星期日,如果周期内数据不全,如'20180722'这周只有3行数据,也会按照上述方法进行转换。

  1. freq = '1W' 
  2. df_weekly = df[['open']].resample(rule=freq).first() 
  3. df_weekly['high'] = df['high'].resample(rule=freq).max() 
  4. df_weekly['low'] = df['low'].resample(rule=freq).min() 
  5. df_weekly['close'] = df['close'].resample(rule=freq).last() 
  6. df_weekly['vol'] = df['vol'].resample(rule=freq).sum() 
  7.  
  8. df_weekly 
  9.  
  10. Out[33]:  
  11.             open  high   low  close         vol 
  12. trade_date                                      
  13. 2018-07-08  9.05  9.05  8.45   8.66  5125563.53 
  14. 2018-07-15  8.69  9.03  8.58   8.88  4901983.84 
  15. 2018-07-22  8.85  8.90  8.66   8.70  1590354.68 

升采样:以周线数据转换日线数据为例。继续使用上面刚刚转换好的周线数据,我们再试着把它转换成日线数据。先通过.resample('D').asfreq()【5】方法,将周线数据的频率转换成日线,效果如下。

  1. df_daily = df_weekly.resample('D').asfreq() 
  2. print(df_daily) 
  3.  
  4. Out[52]:  
  5.             open  high   low  close         vol 
  6. trade_date                                      
  7. 2018-07-08  9.05  9.05  8.45   8.66  5125563.53 
  8. 2018-07-09   NaN   NaN   NaN    NaN         NaN 
  9. 2018-07-10   NaN   NaN   NaN    NaN         NaN 
  10. 2018-07-11   NaN   NaN   NaN    NaN         NaN 
  11. 2018-07-12   NaN   NaN   NaN    NaN         NaN 
  12. 2018-07-13   NaN   NaN   NaN    NaN         NaN 
  13. 2018-07-14   NaN   NaN   NaN    NaN         NaN 
  14. 2018-07-15  8.69  9.03  8.58   8.88  4901983.84 
  15. 2018-07-16   NaN   NaN   NaN    NaN         NaN 
  16. 2018-07-17   NaN   NaN   NaN    NaN         NaN 
  17. 2018-07-18   NaN   NaN   NaN    NaN         NaN 
  18. 2018-07-19   NaN   NaN   NaN    NaN         NaN 
  19. 2018-07-20   NaN   NaN   NaN    NaN         NaN 
  20. 2018-07-21   NaN   NaN   NaN    NaN         NaN 
  21. 2018-07-22  8.85  8.90  8.66   8.70  1590354.68 

结果中出现了很多空值,需要我们按照一定的方法进行填充,可以通过添加.ffill()或者.bfill()实现。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读