当window = 1时,pandas滚动中可能出现的错误

时间:2016-03-24 09:52:50

标签: python pandas

为了在我的代码中使用更通用的表示法,我想将原始时间序列表示为1个时段的移动平均值。 非常出乎意料的是,使用pandas pd.rolling_mean函数,两者并不完全相同:

import pandas as pd
import numpy as np

np.random.seed(1)

ts = pd.Series(np.random.rand(1000))

mavg = pd.rolling_mean(ts, 1)

(ts - mavg).describe()
Out[120]: 
count    1.000000e+03
mean     6.284973e-16
std      3.877250e-16
min     -3.330669e-16
25%      3.330669e-16
50%      5.551115e-16
75%      8.881784e-16
max      1.554312e-15
dtype: float64

any((ts - mavg).dropna()>0)
Out[121]: True

这应该被视为错误还是我错过了什么?

2 个答案:

答案 0 :(得分:3)

这些数字非常小,并且在由浮点数如何工作引起的数值“噪音”范围内。浮点数不能完全代表所有数字。因此,在使用浮点数进行计算时,通常会留下较小的“残差”。检查一个小epsilon:

div::before {
  content: "\f086";
  font-family: "FontAwesome";
}

答案 1 :(得分:0)

差异来自浮点计算。由于内部表示它们的方式,计算时浮点数并不完全相同。在这些"舍入错误"你的号码是一样的。