选择性日期时间索引数据帧插值

时间:2020-03-30 05:19:37

标签: python-3.x pandas datetime time-series pandas-groupby

简介

我有一个包含时间序列数据的DataFrame。我正在研究一个分析CGM数据的项目,该数据试图估算血糖。 我正在使用的传感器有时不会记录一些数据,即CSV缺少我在应用程序屏幕上未观察到的值(它似乎一直是连续的,我正在佩戴传感器)。 此时间序列的理论周期 5分钟。但是,有时我们会很不规则地记录数据,如下图所示。

我想实现的目标

我想处理我的数据,以便插值并填充时间序列的某些窗口。

  1. 将数据上采样到 1分钟时间段
  2. 仅当非Nan值之间的时间差小于指定值(即datetime.timedelta(minutes=30)
  3. 时才对数据进行插值)

数据:

作为图片

Sample irregularly-sampled DataFrame

作为熊猫可读的虚拟示例

    Sensor Glucose (mg/dL)  ISIG Value
DateTime        
2020-03-16 16:31:00     116.0   17.60
2020-03-16 16:36:00     110.0   16.26
2020-03-16 16:41:00     112.0   18.66
2020-03-16 16:46:00     121.0   21.86
2020-03-16 16:51:00     124.0   20.67
2020-03-16 16:56:00     NaN     NaN
2020-03-16 17:00:00     NaN     NaN
2020-03-16 17:01:00     116.0   15.86
2020-03-16 17:06:00     108.0   14.99
2020-03-16 17:11:00     108.0   17.43
2020-03-16 17:16:00     104.0   15.42
2020-03-16 17:21:00     103.0   16.49
2020-03-16 17:26:00     108.0   18.83
2020-03-16 17:31:00     104.0   15.18
2020-03-16 17:36:00     106.0   18.06
2020-03-16 17:39:00     NaN     NaN
2020-03-16 17:41:00     110.0   19.49
2020-03-16 17:46:00     114.0   20.13
2020-03-16 17:51:00     121.0   21.27
2020-03-16 17:52:00     NaN     NaN
2020-03-16 17:57:00     NaN     NaN
2020-03-16 17:58:00     NaN     NaN
2020-03-16 18:00:00     NaN     NaN
2020-03-16 19:00:00     NaN     NaN
2020-03-16 19:12:00     NaN     NaN
2020-03-16 19:13:00     NaN     NaN
2020-03-16 19:30:00     127.0   NaN
2020-03-16 19:35:00     129.0   NaN
2020-03-16 19:40:00     134.0   NaN
2020-03-16 19:45:00     NaN     NaN
2020-03-16 19:50:00     NaN     NaN
2020-03-16 19:55:00     NaN     NaN
2020-03-16 20:00:00     NaN     NaN
2020-03-16 20:05:00     NaN     NaN
2020-03-16 20:10:00     NaN     NaN
2020-03-16 20:15:00     NaN     NaN
2020-03-16 20:20:00     NaN     NaN
2020-03-16 20:25:00     NaN     NaN
2020-03-16 20:30:00     NaN     NaN
2020-03-16 20:35:00     NaN     NaN
2020-03-16 20:40:00     NaN     NaN
2020-03-16 20:45:00     NaN     NaN
2020-03-16 20:50:00     120.0   NaN

例如,在这里,我想插值NaN的第一个和第二个出现,但由于窗口太大,所以不插值第三个或第四个出现。

注意事项

我认为同时存在两个问题:

  1. 索引不是固定的,因此这是缺少时序数据pd.infer_freq(df.index)的结果之一None
  2. 存在缺失值,即使没有缺失值,上采样也会创建NaN。我想通过插值来填充这些缺失的值,当时间窗口大于某个值时,我不想填充空白空间,因为从生理学角度来看这不再有效(永远不会存在严格的线性或二次行为2小时,但可以肯定地说,这种现象在1分钟的时间范围内是线性的)

我尝试过的事情:

我知道上采样非常简单,只需一根线即可:

new_df = df.resample("1T").asfreq()

查找索引,其间隔大于期望值:

df.index.to_series().diff(1) > dt.timedelta(minutes=45)

如果所有规则间隔的日志都包含有效的葡萄糖条目,但是其中许多具有NaN,这将有助于解决问题。

我知道pd.DataFrame.groupby是可行的方法,尽管如此,我对使用此功能还是一无所知。

0 个答案:

没有答案
相关问题