[英]How can I make pandas treat the start of the next business day as the next time after the previous business day?
我有金融交易数据(带有交易时间的时间戳,因此存在重复的时间,并且日期时间的间隔不规则)。 基本上,我在pandas数据框中只有一个datetime列和一个price列,并且已经计算了收益率,但是我想对数据进行线性插值,以便可以每秒,每分钟,每天等获取价格估算值。 。
似乎最好的方法是将周二的开始视为在周一结束之后,因此基本上可以在两天之间的时间间隔内消除。 熊猫提供了一种简便的方法吗? 我已经搜索了文档并找到了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
抱歉,仍然不清楚。 我只想找到一种方法将一个交易日的末尾缝合到下一个交易日的末尾,同时又不丢失实际的日期时间信息。
您应该使用熊猫重采样:
df=df.resample("D")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.