上QQ阅读APP看书,第一时间看更新
7.2 数据周期变换
在进行数据分析的时候,我们经常需要选取不同时间周期的数据。比如,假设我们现在有1分钟周期的数据,需要合成15分钟,或者日线数据,那么这种情况可以使用Pandas自带的resample功能进行处理。
在TuShare上可以下载到5分钟数据。下面我们列举个示例,将5分钟数据转化为1小时数据。
首先是获取数据,示例代码如下:
df=ts.get_k_data('399300',ktype='5') df.head()
得到的结果如图7-7所示。
图 7-7
Pandas提供了resample方法,可用于变换时间序列的周期。要想使用resample方法,首先必须要有datetime类型的index。这里date是字符串,我们需要将date转化为datetime类型,而且还要将其设为index,示例代码如下:
# 将字符串转化为datetime df['date']=pd.to_datetime(df['date']) # 设置date为index df=df.set_index('date')
现在,我们要调用resample方法了。这里是将5分钟数据转为15分钟数据,相当于每三个数据点合并为一个。需要注意的时候,不同的数据,合并的方式是不一样的。比如,对于最高价high,我们要选择三个数据中的最大值作为新的最高价high。对于成交量volume,我们要将三个值加总,作为新的成交量volume。以下是转换代码:
df_new=pd.DataFrame() # 将5分钟转化为15分钟数据,相当于将3个数据点合并为1个数据点 # 3个数据点中,取最前面的作为open df_new['open']=df['open'].resample('15T').first() # 3个数据点中,取最大的作为high df_new['high']=df['high'].resample('15T').max() # 3个数据点中,取最小的作为low df_new['low']=df['low'].resample('15T').min() # 3个数据点中,取最后的作为close df_new['close']=df['close'].resample('15T').last() # 3个数据点加总 df_new['volume']=df['volume'].resample('15T').sum()
在我们调用resample方法之后,会出现很多NaN值,如图7-8所示。
图 7-8
原因是resample是对所有的时间段都进行的,包括没有交易的时间段,当然,这个时间段是没有相应的数值的。
所以我们还需要删除NaN值,操作代码如下:
df_new=df_new.dropna()
这个时候,就完成了时间周期的转换。可通过如下代码得到最终结果:
df_new.head()
最终的结果如图7-9所示。
图 7-9