数据框中的 NaN:当时间序列的第一个观察结果为 NaN 时,用第一个可用的前面填充,否则延续最后/上一个观察结果

NaN in data frame: when first observation of time series is NaN, frontfill with first available, otherwise carry over last / previous observation

我正在从 statsmodels 执行 ADF 测试。价值系列可能有遗漏的意见。事实上,如果 NaN 的分数大于 c,我将放弃分析。但是,如果该系列通过了我的问题,那就是 adfuller 无法处理丢失的数据。由于这是具有最小帧大小的训练数据,我想这样做:

1) 如果x(t=0) = NaN,则找到下一个非NaN值(t>0) 2) 否则如果 x(t) = NaN,则 x(t) = x(t-1)

所以我在这里妥协了我的第一个值,但要确保输入数据始终具有相同的维度。或者,如果第一个值缺失,我可以使用 dropna 的限制选项填充 0。

根据文档,不同的选项对我来说并不是 100% 清楚: 方法:{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认 None

Method to use for filling holes in reindexed Series pad / ffill: propagate last valid observation forward to next valid backfill / bfill: use NEXT valid observation to fill gap

pad / ffill: 那是不是意味着我继承了之前的值? backfill / bfill:这是否意味着我的值是从将来的有效值中获取的?

df.dropna(method = 'bfill', limit 1, inplace = True)
df.dropna(method = 'ffill', inplace = True)

这会限制使用吗?该文档使用 'limit = 1' 但已预先确定要填充的值。

1) if x(t=0) = NaN, then find the next non-NaN value (t>0) 2) otherwise if x(t) = NaN, then x(t) = x(t-1)

为了 front-fill 除(可能)第一个应该回填的第一个观察之外的所有观察,您可以将两个调用链接到 fillna,第一个调用 method='ffill',第二个调用method='fill':

df = pd.DataFrame({'a': [None, None, 1, None, 2, None]})
>>> df.fillna(method='ffill').fillna(method='bfill')
    a
0   1.0
1   1.0
2   1.0
3   1.0
4   2.0
5   2.0