重新采样功能的输出不正确将OHLC分钟数据转换为每日OHLC数据

时间:2018-06-13 17:19:40

标签: python time-series

我使用resample功能获取不正确的数据,将分钟数据转换为每日数据。仔细检查输出后,我发现该过程输出16:00 bar的开放时间为DAILY OPEN。此外,它正在输出9:31柱的收盘价作为DAILY CLOSE。

这是我的代码:

import numpy as np
import pandas as pd
from pylab import mpl, plt
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline
import cufflinks as cf

df = pd.read_csv('ES#CMin_Pit.csv', index_col='Date', parse_dates=['Date'])

df.tail()

Time    Inc Vol Volume  Open    High    Low Close
Date                            
2005-09-07  09:34:00    2309.0  39145.0 1150.75 1151.00 1150.50 1150.75
2005-09-07  09:33:00    1803.0  36836.0 1150.75 1150.75 1150.25 1150.50
2005-09-07  09:32:00    972.0   35033.0 1150.75 1150.75 1150.50 1150.75
2005-09-07  09:31:00    1440.0  34061.0 1150.75 1151.00 1150.50 1150.50
NaT NaN NaN NaN NaN NaN NaN NaN

conversion = {'Open' : 'first', 'High' : 'max', 'Low' : 'min', 'Close' : 'last', 'Volume' : 'sum'}

data_day =  df.resample('D').apply(conversion)

data_day.tail(5)

Open    High    Low Close   Volume
Date                    
2018-05-20  NaN NaN NaN NaN 0.0
2018-05-21  2732.50 2739.25 2725.25 2730.50 210297692.0
2018-05-22  2726.00 2741.75 2721.50 2738.25 179224835.0
2018-05-23  2731.75 2732.75 2708.50 2710.50 292305588.0
2018-05-24  2726.00 2730.50 2705.75 2725.00 312575571.0

我怀疑问题是建立转换"但是,我已经看到这种方法在我的研究中使用了不止一次。有任何建议指定适当的栏来拉动每日开盘价和收盘价吗?即,使用"首先,"每日开放价格为9:31分钟,而不是16:00吧。另外要使用" last"每日关闭价格的16:00栏而不是9:31吧?谢谢LL

2 个答案:

答案 0 :(得分:0)

可能的问题可能是您的时间序列数据没有按时间顺序排序。 尝试: data_day = df.groupby(df.Date).ohlc()

答案 1 :(得分:0)

我认为你只是想起了groupbyresample,因为你想选择一天中的某些值(第一个,最后一个,最大值)等等。分组可以做什么。但重新取样通过插值重新计算数据,并且每天只需要一个单独的值来重新绘制特征,不同的样本尽可能接近原始值。

简而言之:只需将resample替换为groupby