2017-10-11 39 views
6

Mam błąd z toczeniem pand, gdy używam pływaków blisko nieskończoności. Wyświetlam tutaj przykład:pandas.DataFrame.rolling nie działa z dużymi pływakami

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 

Odpowiedź w ostatnim bicie powinna wynosić 1! ale jest 0,5. Dlaczego toczenia oszaleje podczas korzystania z dużych liczb? ten sam przykład z mniejszym floatem:

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

Testowano bez funkcji .sum(), aby sprawdzić, co się stało. Ostatni wpis kończy się na 1, natomiast powinien wynosić 2. Zmiana numeru 1e19 na mniejszą liczbę rozwiązała problem, mimo że znajduje się poza kroczącym oknem i nie powinien wywoływać żadnego efektu. Bardzo dziwne zachowanie! Może przesłać zgłoszenie problemu na [pandas github] (https://github.com/pandas-dev/pandas/issues)? –

Odpowiedz

1

Problem nie dotyczy pand. Próbowałem tego samego w R z funkcją rollmean i daje dokładnie taki sam wynik jak pandy. Nie działa dla wartości 1e16 i wyższych. Chodzi mi o to, jak system radzi sobie z floatem.