问题
我有一个包含金融数据的数据框,以1分钟间隔采样。偶尔会出现一行或两行数据缺失的情况。
- 我正在寻找一种好的(简单高效的)方法,在数据缺失的点处将新行插入到数据框中。
- 新行可以是空的,除了索引外,索引应该包含时间戳。
例如:
#Example Input---------------------------------------------
open high low close
2019-02-07 16:01:00 124.624 124.627 124.647 124.617
2019-02-07 16:04:00 124.646 124.655 124.664 124.645
# Desired Ouput--------------------------------------------
open high low close
2019-02-07 16:01:00 124.624 124.627 124.647 124.617
2019-02-07 16:02:00 NaN NaN NaN NaN
2019-02-07 16:03:00 NaN NaN NaN NaN
2019-02-07 16:04:00 124.646 124.655 124.664 124.645
我的当前方法基于这篇文章 - 使用pandas查找时间序列数据中的缺失分钟数据,仅说明如何标识间隙,而不是如何填充它们。
我的做法是创建一个1分钟间隔的DateTimeIndex。然后,利用此索引,我创建了一个全新的数据框,将其合并到原始数据框中,从而填补了空缺。代码如下。这似乎是一个绕弯的方式,我想知道是否有更好的方法。也许可以通过重采样数据来实现?
import pandas as pd
from datetime import datetime
# Initialise prices dataframe with missing data
prices = pd.DataFrame([[datetime(2019,2,7,16,0), 124.634, 124.624, 124.65, 124.62],[datetime(2019,2,7,16,4), 124.624, 124.627, 124.647, 124.617]])
prices.columns = ['datetime','open','high','low','close']
prices = prices.set_index('datetime')
print(prices)
# Create a new dataframe with complete set of time intervals
idx_ref = pd.DatetimeIndex(start=datetime(2019,2,7,16,0), end=datetime(2019,2,7,16,4),freq='min')
df = pd.DataFrame(index=idx_ref)
# Merge the two dataframes
prices = pd.merge(df, prices, how='outer', left_index=True,
right_index=True)
print(prices)