2017-10-11 51 views
6

当使用花车接近无穷大时,熊猫滚动时发生错误。我在这里显示一个示例:pandas.DataFrame.rolling不适用于大型花车

import pandas as pd 
series = pd.Series(1.,index = pd.date_range('2015-01-01', periods=6)) 
series[series.index[2]] = 1e19 
series 
2015-01-01 1.000000e+00 
2015-01-02 1.000000e+00 
2015-01-03 1.000000e+19 
2015-01-04 1.000000e+00 
2015-01-05 1.000000e+00 
2015-01-06 1.000000e+00 
Freq: D, dtype: float64 
series.rolling('2D', closed = 'left').mean() 
2015-01-01    NaN 
2015-01-02 1.000000e+00 
2015-01-03 1.000000e+00 
2015-01-04 5.000000e+18 
2015-01-05 5.000000e+18 
2015-01-06 5.000000e-01 
Freq: D, dtype: float64 

最后一位的答案应该是1!但是它是0.5。为什么在使用大数字时会滚动?与较小的浮动相同的示例:

series[series.index[2]] = 1e9 
series.rolling('2D', closed = 'left').mean() 
2015-01-01   NaN 
2015-01-02   1.0 
2015-01-03   1.0 
2015-01-04 500000000.5 
2015-01-05 500000000.5 
2015-01-06   1.0 
Freq: D, dtype: float64 
+0

用.sum()进行测试,以查看发生了什么。最后一个条目最终为1,而它应该为2.将1e19更改为较小的数字可以解决问题,即使它位于滚动窗口之外也不会起作用。非常奇怪的行为!也许在[pandas github](https://github.com/pandas-dev/pandas/issues)上提交问题单? –

回答

1

问题不在于熊猫。我在R中用rollmean函数尝试了同样的事情,它给出了与熊猫完全相同的结果。它不适用于1e16或更高的价值。我必须处理系统如何处理浮动。