我从集合中导入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
我怎样才能让它发挥作用?
麦克
答案 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:, :]
)
如果您不在法国,请不要忘记更改硬编码时区。 :-)