| 
                         为了方便大家观察,把这段时间的日历附在下面,'2018-07-02'正好是星期一。 
  
转换的思路是这样的,以日历中的周进行聚合,如'20180702'-'20180708',取该周期内,日线开盘价的第一个值作为周开盘价,日线最高价的最大值作为周最高价,日线最低价的最小值作为周最低价,日线收盘价的最后一个值作为周最收盘价,日线最高价的最大值作为周最高价,日线成交量的求和作为周成交量(手),如下图黄色方框所示。 
  
我们可以通过.resample()【4】方法实现上述操作,对DataFrame和Series都适用。其中,参数rule设置需要转换成的频率,'1W'是一周。 
具体转换的代码如下,日期默认为本周的星期日,如果周期内数据不全,如'20180722'这周只有3行数据,也会按照上述方法进行转换。 
- freq = '1W' 
 - df_weekly = df[['open']].resample(rule=freq).first() 
 - df_weekly['high'] = df['high'].resample(rule=freq).max() 
 - df_weekly['low'] = df['low'].resample(rule=freq).min() 
 - df_weekly['close'] = df['close'].resample(rule=freq).last() 
 - df_weekly['vol'] = df['vol'].resample(rule=freq).sum() 
 -  
 - df_weekly 
 -  
 - Out[33]:  
 -             open  high   low  close         vol 
 - trade_date                                      
 - 2018-07-08  9.05  9.05  8.45   8.66  5125563.53 
 - 2018-07-15  8.69  9.03  8.58   8.88  4901983.84 
 - 2018-07-22  8.85  8.90  8.66   8.70  1590354.68 
 
  
升采样:以周线数据转换日线数据为例。继续使用上面刚刚转换好的周线数据,我们再试着把它转换成日线数据。先通过.resample('D').asfreq()【5】方法,将周线数据的频率转换成日线,效果如下。 
- df_daily = df_weekly.resample('D').asfreq() 
 - print(df_daily) 
 -  
 - Out[52]:  
 -             open  high   low  close         vol 
 - trade_date                                      
 - 2018-07-08  9.05  9.05  8.45   8.66  5125563.53 
 - 2018-07-09   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-10   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-11   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-12   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-13   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-14   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-15  8.69  9.03  8.58   8.88  4901983.84 
 - 2018-07-16   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-17   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-18   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-19   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-20   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-21   NaN   NaN   NaN    NaN         NaN 
 - 2018-07-22  8.85  8.90  8.66   8.70  1590354.68 
 
  
结果中出现了很多空值,需要我们按照一定的方法进行填充,可以通过添加.ffill()或者.bfill()实现。                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |