我有金融交易数据(用交易时间加时间戳,所以有重复的时间,日期时间不规则)。基本上我在熊猫数据框中只有一个日期时间列和一个价格列,我已经计算了回报,但我想线性插值数据,这样我就可以得到每秒,每分钟,每天等的价格估算。
这似乎是做到这一点的最佳方式是将星期二的开始视为在星期一结束之后发生,因此基本上按天之间的时间进行修改。大熊猫提供了一种简单的方法吗?我搜索了文档并找到了BDay,但这似乎没有做我想要的。
编辑:以下是我的代码示例:
df = read_csv(filePath,usecols=[0,4]) #column 0 is date_time and column 4 is price
df.date_time = pd.to_datetime(df.date_time,format = '%m-%d-%Y %H:%M:%S.%f')
def get_returns(df):
return np.log(df.Price.shift(1) / df.Price)
但我的问题是这是交易数据,所以我在一段时间内完成特定股票的每笔交易,交易只在交易日(上午9:30 - 下午4点)进行,数据和数据有时间戳。我可以拿出每次交易发生的价格并制作价格序列,但是当我计算峰度和其他程式化的事实时,我得到了非常奇怪的结果,因为这些统计数据通常在均匀间隔的时间序列数据上运行。
我开始做的是编写代码以线性插入我的数据,这样我就可以每10秒,分钟,10分钟,小时,天等获得价格。但是,工作日,周末,假期和所有交易不可能发生的时间,我想让python认为存在的唯一时间是在一个工作日,所以我的现实世界时间仍然与正确的日期时间匹配,但不是我需要一个价格交易结束时所有时间都盖章。
def lin_int_tseries(series, timeChange):
tDelta = datetime.timedelta(seconds=timeChange)
data_times = series['date_time']
new_series = []
sample_times = []
sample_times.append(data_times[0])
while max(sample_times) < max(data_times):
sample_times.append(sample_times[-1] + tDelta)
for position,time in enumerate(sample_times):
try:
ind = data_times.index(time)
new_series.append(series[ind])
except:
t_next = getnextTime(time,data_times) #get next largest timestamp in data
t_prev = getprevTime(time,data_times) #get next smallest timestamp in data
ind_next = data_times.index(t_next) #index of next largest timestamp
ind_prev = data_times.index(t_prev) #index of next smallest timestamp
p_next = series[ind_next][1] #price at next timestamp
p_prev = series[ind_prev][1] #price a prev timestamp
omega = (float(time) - t_prev)/(t_next - t_prev) #linear interpolation
p_interp = (1 - omega)*p_prev + omega*p_next
new_series.append([time,p_interp])
return new_series
很抱歉,如果还不清楚的话。我只是想找到一种方法将一个交易日的结束缝到下一个交易日的开头,同时不会丢失实际的日期时间信息。
答案 0 :(得分:0)
您应该使用pandas resample:
df=df.resample("D")