在特定时间间隔内填充时间序列 pandas 数据帧中的空白

Posted

技术标签:

【中文标题】在特定时间间隔内填充时间序列 pandas 数据帧中的空白【英文标题】:Fill gaps in time series pandas dataframe in specific time intervall 【发布时间】:2021-11-12 05:11:45 【问题描述】:

我已经问过一个填补时间序列空白的相关问题Fill Gaps in time series pandas dataframe 并且 Akshay Sehgal 很友好地给出了一个很好的详细答案!

但是我发现我的数据存在另一个问题。

下面的代码现在可以很好地填补空白,只要有交易日开始和结束的时间戳。 例如,我想填补 09:30 到 16:00 之间时间序列中的所有空白。只要数据中有时间戳,从 09:30 开始到 16:00 结束,这段时间内的所有间隙都由 resample() 填充。 但是,如果当天的数据从 9:45 开始,则重新采样功能将从此时开始填补空白。 但它不会从 09:30 到 09:40 生成新的时间戳(如果我们考虑 5 分钟间隔)

这是我目前使用的代码:

# create new col FillDate from the timestamp (we need this to group the data (otherwise resample would also create new dats and not only times))
df_process['FillDate'] = df_process['Exchange DateTime'].dt.date
# set timestamp as index
df_process.set_index('Exchange DateTime', inplace=True)

# group by for each date, resample missing timestamps and forward fill values
df_process = df_process.groupby('FillDate').resample(rule=update_interval).ffill()

# reset the index and delete the colume Fill Date
df_process_out = df_process.reset_index('FillDate', drop=True).drop('FillDate',1)

但是,无论 09:30 或 16:00 是否有可用的时间戳,我都希望始终在固定时间间隔 09:30 到 16:00 内重新采样。

有什么想法可以有效地解决这个问题吗?

任何帮助/指导将不胜感激 谢谢

【问题讨论】:

【参考方案1】:

如果有人感兴趣,我想我找到了解决方案:

   # group the time sires by dates (using the FillDate Column) and than apply 
   # the "Reindex_by_Date" Function to generate the index for each date in the
   # given time frame and fill missing tim stamps 
   df_process = df_process.groupby('FillDate').apply(reindex_by_date, intervall=update_interval)

   #drop the helper index "FillDate"
   df_process = df_process.reset_index('FillDate', drop=True).drop('FillDate',1)

   # since we reindexed by each date only it can happen that if there is a value missing
   # on the boarder of the index (e.g. last or fist entry) it might have NaN as value
   # we fix this here (we forward fill for example taking the last value from the previous day)
   df_process_out = df_process.fillna(method='ffill')


   # Helper Function for Closing data gaps with Pandas Groupby and resample
   def reindex_by_date(df, intervall):
        start_range = df.index.date.min().strftime('%Y-%m-%d') +" 09:30:00"
        end_range = df.index.date.max().strftime('%Y-%m-%d') +" 16:00:00"
        dates = pd.date_range(start_range, end_range, freq=intervall)
        return df.reindex(dates).ffill()here

非常欢迎发表评论,或者如果有人有更有效的解决方案,我会非常感兴趣。 谢谢

【讨论】:

以上是关于在特定时间间隔内填充时间序列 pandas 数据帧中的空白的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 的 datetimeindex 在特定日期按分钟和小时提取时间间隔

如何通过选择特定时间间隔内的时间来索引 pandas DataFrames?

基于时间间隔使用 DatetimeIndex 对 Pandas 数据帧进行切片

计算pandas数据帧中日期时间间隔之间的实例数

如何在指定的时间间隔使用 shift 填充 pandas 中的缺失值?

Pandas 内插返回的 NaN