我有一个pandas数据框,其中时间序列存在间隙。
它看起来像这样:
示例输入
--------------------------------------
Timestamp Close
2021-02-07 09:30:00 124.624
2021-02-07 09:31:00 124.617
2021-02-07 10:04:00 123.946
2021-02-07 16:00:00 123.300
2021-02-09 09:04:00 125.746
2021-02-09 09:05:00 125.646
2021-02-09 15:58:00 125.235
2021-02-09 15:59:00 126.987
2021-02-09 16:00:00 127.124
期望的输出结果
--------------------------------------------
Timestamp Close
2021-02-07 09:30:00 124.624
2021-02-07 09:31:00 124.617
2021-02-07 09:32:00 124.617
2021-02-07 09:33:00 124.617
'Insert a line for each minute up to the next available
timestamp with the Close value form the last available timestamp'
2021-02-07 10:03:00 124.617
2021-02-07 10:04:00 123.946
2021-02-07 16:00:00 123.300
'I dont want lines inserted here. As this date is not
present in the original dataset (could be a non trading
day so I dont want to fill this gap)'
2021-02-09 09:04:00 125.746
2021-02-09 09:05:00 125.646
2021-02-09 15:58:00 125.235
'Fill the gaps here again but only between 09:30 and 16:00 time'
2021-02-09 15:59:00 126.987
2021-02-09 16:00:00 127.124
我尝试过的方法是:
'# set the index column'
df_process.set_index('Exchange DateTime', inplace=True)
'# resample and forward fill the gaps'
df_process_out = df_process.resample(rule='1T').ffill()
'# filter and return only timestamps between 09:30 and 16:00'
df_process_out = df_process_out.between_time(start_time='09:30:00', end_time='16:00:00')
然而,如果我采用这种方法,它也会对原始数据框中不存在的日期重新采样并生成新的时间戳。在上面的示例中,它还将为2021-02-08以分钟为基础生成时间戳。
有什么方法可以避免这种情况发生?
另外,是否有更好的方法来避免在整个时间范围内重新采样?
df_process_out = df_process.resample(rule='1T').ffill()
这段代码生成了00:00到24:00的时间戳,但在下一行代码中,我又需要过滤掉大部分时间戳,看起来不太高效。
如果有任何帮助/指导,将不胜感激。
谢谢。
编辑:
根据要求,提供一个小的样本集
df_in:输入数据
df_out_error:错误的输出数据
df_out_OK:输出数据应该是什么样子的
在以下ColabNotebook中,我准备了一个小样本。
https://colab.research.google.com/drive/1Fps2obTv1YPDpTzXTo7ivLI5njoI-y4n?usp=sharing
请注意,这只是数据的一个小子集。 我正在尝试清理多年的数据,它们是结构化的,并显示像这样的缺少分钟时间戳。
2021-02-07 10:04:00
和2021-02-07 16:00:00
之间插入行的原因是什么?还是每分钟都需要填充? - Akshay Sehgal