Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pd.rolling_mean becoming deprecated - alternatives for ndarrays

EDIT: This question was asked in 2016 and similar questions have been posted on SO years later after the functionality was finally removed, e.g. module 'pandas' has no attribute 'rolling_mean'

However, the question concerns performance of the new pd.rolling.mean() and should stay open until the associated pandas issue is fixed.


It looks like pd.rolling_mean is becoming deprecated for ndarrays,

 pd.rolling_mean(x, window=2, center=False)

FutureWarning: pd.rolling_mean is deprecated for ndarrays and will be removed in a future version

but it seems to be the fastest way of doing this, according to this SO answer.

Are there now new ways of doing this directly with SciPy or NumPy that are as fast as pd.rolling_mean?

like image 631
saladi Avatar asked Mar 29 '16 02:03

saladi


3 Answers

EDIT -- Unfortunately, it looks like the new way is not nearly as fast:

New version of Pandas:

In [1]: x = np.random.uniform(size=100)

In [2]: %timeit pd.rolling_mean(x, window=2)
1000 loops, best of 3: 240 µs per loop

In [3]: %timeit pd.Series(x).rolling(window=2).mean()
1000 loops, best of 3: 226 µs per loop

In [4]: pd.__version__
Out[4]: '0.18.0'

Old version:

In [1]: x = np.random.uniform(size=100)

In [2]: %timeit pd.rolling_mean(x,window=2)
100000 loops, best of 3: 12.4 µs per loop

In [3]: pd.__version__
Out[3]: u'0.17.1'
like image 165
saladi Avatar answered Nov 04 '22 01:11

saladi


Looks like the new way is via methods on the DataFrame.rolling class (I guess you're meant to think of it sort of like a groupby): http://pandas.pydata.org/pandas-docs/version/0.18.0/whatsnew.html

e.g.

x.rolling(window=2).mean()
like image 33
maxymoo Avatar answered Nov 04 '22 01:11

maxymoo


try this

x.rolling(window=2, center=False).mean()
like image 32
Pruce Uchiha Avatar answered Nov 04 '22 01:11

Pruce Uchiha