我正在查看有关窗口函数的教程,但我不太明白为什么以下代码会产生 NaN。
如果我理解正确,代码创建了一个大小为 2 的滚动窗口。为什么第一、第四和第五行有 NaN?起初,我认为这是因为将 NaN 与另一个数字相加会产生 NaN,但后来我不确定为什么第二行不会是 NaN。
dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
index=pd.date_range('20130101 09:00:00', periods=5, freq='s'))
In [58]: dft.rolling(2).sum()
Out[58]:
B
2013-01-01 09:00:00 NaN
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 3.0
2013-01-01 09:00:03 NaN
2013-01-01 09:00:04 NaN
原文由 Huey 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先要注意的是,默认情况下
rolling
查找要聚合的前 n-1 行数据,其中 n 是窗口大小。如果不满足该条件,它将为窗口返回 NaN。这就是第一行发生的事情。在第四行和第五行中,这是因为总和中的一个值是 NaN。如果您想避免返回 NaN,您可以将
min_periods=1
传递给将窗口中有效观察的最小所需数量减少到 1 而不是 2 的方法: