试图使用Deque来限制传入数据的DataFrame ......建议?

时间:2016-05-04 06:19:17

标签: python nan quantitative-finance

我从集合中导入deque以限制数据框的大小。输入新数据时,应逐渐删除旧数据。

大图: 我创建了一个过去26天历史值的数据框,从“无论什么日子......”开始。

混乱: 我认为我的数据每分钟都以一系列格式出现,然后我尝试使用deque来限制maxlen。然后我尝试将数据实现到数据框中。但是我只是得到了NaN值。

代码:

import numpy as np
import pandas as pd
from collections import deque

def initialize(context):
    context.stocks = (symbol('AAPL'))

def before_trading_start(context, data):
    data = data.history(context.stocks, 'close', 20, '1m').dropna()
    length = 5
    d = deque(maxlen = length)
    data = d.append(data)
    index = pd.DatetimeIndex(start='2016-04-03 00:00:00', freq='S', periods=length)
    columns = ['price']
    df = pd.DataFrame(index=index, columns=columns, data=data)

    print df

我怎样才能让它发挥作用?

麦克

1 个答案:

答案 0 :(得分:2)

如果我对问题的理解正确,那么您希望保留最后26天的所有值。以下功能对您来说足够了吗?

def select_values_of_the_last_twenty_six_days(old_data, new_data):
    length = 5
    twenty_six_day_before = (
        pd.Timestamp.now(tz='Europe/Paris').round('D')
        - pd.to_timedelta(26, 'D')
    )
    return (
        pd.concat([old_data, new_data])
        .loc[lambda x: x.index > twenty_six_day_before, :]
        .iloc[-length:, :]
    )

如果日期不在索引中:

def select_values_of_the_last_twenty_six_days(old_data, new_data):
    length = 5
    twenty_six_day_before = (
        pd.Timestamp.now(tz='Europe/Paris').round('D')
        - pd.to_timedelta(26, 'D')
    )
    return (
        pd.concat([old_data, new_data])
        # the following line is changed for values in a specific column
        .loc[lambda x: x['column_with_date'] > twenty_six_day_before, :]
        .iloc[-length:, :]
    )

如果您不在法国,请不要忘记更改硬编码时区。 :-)

相关问题