【问题标题】:pandas.DataFrame.rolling not working with huge floatspandas.DataFrame.rolling 不适用于巨大的浮点数
【发布时间】:2018-03-23 05:49:12
【问题描述】:

在使用接近无穷大的浮点数时,熊猫滚动出现错误。我在这里展示一个例子:

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

【问题讨论】:

  • 用 .sum() 进行了测试,看看发生了什么。最后一个条目最终是 1,而应该是 2。将 1e19 更改为较小的数字可以解决问题,即使它位于滚动窗口之外并且应该没有效果。非常奇怪的行为!也许在pandas github 上提交问题单?

标签: python pandas time-series rolling-average


【解决方案1】:

问题不在于熊猫。我在 R 中用 rollmean 函数尝试了同样的事情,它给出了与 pandas 完全相同的结果。它不适用于 1e16 及以上的值。我认为这与系统如何处理浮动有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2012-04-19
    相关资源
    最近更新 更多