按日期将日期框架分成更小的部分

时间:2018-01-04 04:59:19

标签: python pandas datetime chunking

我有一个大型数据框,其中包含以下统计数据:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1819714 entries, 0 to 1819713
Data columns (total 6 columns):
Date_Time    datetime64[ns]
Open         float64
High         float64
Low          float64
Last         float64
Volume       int64
dtypes: datetime64[ns](1), float64(4), int64(1)
memory usage: 83.3 MB

我需要对它进行评估,但我不明白如何对日期框进行分块。我想将数据帧分解为更小的chunch以将函数应用于它,因为设置它太大并且崩溃了笔记本。我也尝试过:

temp=[]
for i,row in data.groupby(data["Date_Time"].dt.date):
    temp.append(myfunction(row))

但它一直崩溃或我的内存超出错误。解决这个问题的最佳方法是什么?

更新

这是数据(截断):

Sample Data for backtest

我正在尝试执行的功能如下所示。当我以小块切片时它运行正常,但我希望切片每天或每月发生,因为这些是数据帧中的自然中断。 我试图使用Datetimeindex,但我遇到的问题是如果数据不在统一的时间增量中来回索引不起作用。我重新索引了主要的数据集,以允许遍历索引。

data['exit_type']=np.nan
data['exit_price']=np.nan
data['Sreturn']=0
data['position']=0

def backtest(data, endtime=dt.time(16,0)):
    active_position = 0
    for i,row in data.iterrows():
        data.loc[i,'position']=active_position       
        if data.loc[i,'Signal']==1 and active_position==0:
            active_position=1 
            data.loc[i, 'exit_type'] = None    
        elif active_position>0:
            if data.loc[i,'High']<data.loc[i,'L1'] or data.loc[i,'Date_Time'].time()<endtime:
                if data.loc[i,'Low']<=data.loc[i,'boundary2']:
                    data.loc[i, 'exit_type'] = 'stop'
                    active_position=0
                    data.loc[i,'Sreturn']=(data.loc[i,'boundary2']-data.loc[i-1,'Close'])*active_position*50
                else:
                    data.loc[i, 'exit_type'] = None
                    data.loc[i,'position']=active_position
                    data.loc[i,'Sreturn']=(data.loc[i,'Close']-data.loc[i-1,'Close'])*active_position*50
            else:
                data.loc[i, 'exit_type'] = 'exit'
                active_position=0
                data.loc[i,'Sreturn']=(data.loc[i,'L1']-data.loc[i-1,'Close'])*active_position*50

所以我尝试使用groupby函数来分解块,但这就是崩溃的地方。因为有几个条件依赖于其他列来控制“位置”,所以似乎没有一种方法可以进行矢量化。正如人们所看到的,“Sreturn”基于其他几个专栏。

0 个答案:

没有答案