BUG: rolling_count() and expanding_*() return error for empty Series · Issue #8056 · pandas-dev/pandas (original) (raw)

In [1]: from pandas import Series, rolling_count, expanding_count, expanding_mean

In [2]: expanding_count(Series([]))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-16cb9f6736f0> in <module>()
----> 1 expanding_count(Series([]))

C:\Python34\lib\site-packages\pandas\stats\moments.py in expanding_count(arg, freq, center)
    872     of :meth:`~pandas.Series.resample` (i.e. using the `mean`).
    873     """
--> 874     return rolling_count(arg, len(arg), freq=freq, center=center)
    875
    876

C:\Python34\lib\site-packages\pandas\stats\moments.py in rolling_count(arg, window, freq, center, how)
    188     converted = np.isfinite(values).astype(float)
    189     result = rolling_sum(converted, window, min_periods=1,
--> 190                          center=center)  # already converted
    191
    192     # putmask here?

C:\Python34\lib\site-packages\pandas\stats\moments.py in f(arg, window, min_periods, freq, center, how, **kwargs)
    593             return func(arg, window, minp, **kwds)
    594         return _rolling_moment(arg, window, call_cython, min_periods, freq=freq,
--> 595                                center=center, how=how, **kwargs)
    596
    597     return f

C:\Python34\lib\site-packages\pandas\stats\moments.py in _rolling_moment(arg, window, func, minp, axis, freq, center, how, args, kwa
rgs, **kwds)
    345         result = np.apply_along_axis(calc, axis, values)
    346     else:
--> 347         result = calc(values)
    348
    349     rs = return_hook(result)

C:\Python34\lib\site-packages\pandas\stats\moments.py in <lambda>(x)
    339     arg = _conv_timerule(arg, freq, how)
    340     calc = lambda x: func(x, window, minp=minp, args=args, kwargs=kwargs,
--> 341                           **kwds)
    342     return_hook, values = _process_data_structure(arg)
    343     # actually calculate the moment. Faster way to do this?

C:\Python34\lib\site-packages\pandas\stats\moments.py in call_cython(arg, window, minp, args, kwargs, **kwds)
    591         def call_cython(arg, window, minp, args=(), kwargs={}, **kwds):
    592             minp = check_minp(minp, window)
--> 593             return func(arg, window, minp, **kwds)
    594         return _rolling_moment(arg, window, call_cython, min_periods, freq=freq,
    595                                center=center, how=how, **kwargs)

C:\Python34\lib\site-packages\pandas\algos.pyd in pandas.algos.roll_sum (pandas\algos.c:25271)()

C:\Python34\lib\site-packages\pandas\algos.pyd in pandas.algos._check_minp (pandas\algos.c:16394)()

ValueError: min_periods (1) must be <= window (0)

In [3]: rolling_count(Series([]), window=3)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-040797e90b09> in <module>()
----> 1 rolling_count(Series([]), window=3)

C:\Python34\lib\site-packages\pandas\stats\moments.py in rolling_count(arg, window, freq, center, how)
    188     converted = np.isfinite(values).astype(float)
    189     result = rolling_sum(converted, window, min_periods=1,
--> 190                          center=center)  # already converted
    191
    192     # putmask here?

C:\Python34\lib\site-packages\pandas\stats\moments.py in f(arg, window, min_periods, freq, center, how, **kwargs)
    593             return func(arg, window, minp, **kwds)
    594         return _rolling_moment(arg, window, call_cython, min_periods, freq=freq,
--> 595                                center=center, how=how, **kwargs)
    596
    597     return f

C:\Python34\lib\site-packages\pandas\stats\moments.py in _rolling_moment(arg, window, func, minp, axis, freq, center, how, args, kwa
rgs, **kwds)
    345         result = np.apply_along_axis(calc, axis, values)
    346     else:
--> 347         result = calc(values)
    348
    349     rs = return_hook(result)

C:\Python34\lib\site-packages\pandas\stats\moments.py in <lambda>(x)
    339     arg = _conv_timerule(arg, freq, how)
    340     calc = lambda x: func(x, window, minp=minp, args=args, kwargs=kwargs,
--> 341                           **kwds)
    342     return_hook, values = _process_data_structure(arg)
    343     # actually calculate the moment. Faster way to do this?

C:\Python34\lib\site-packages\pandas\stats\moments.py in call_cython(arg, window, minp, args, kwargs, **kwds)
    591         def call_cython(arg, window, minp, args=(), kwargs={}, **kwds):
    592             minp = check_minp(minp, window)
--> 593             return func(arg, window, minp, **kwds)
    594         return _rolling_moment(arg, window, call_cython, min_periods, freq=freq,
    595                                center=center, how=how, **kwargs)

C:\Python34\lib\site-packages\pandas\algos.pyd in pandas.algos.roll_sum (pandas\algos.c:25271)()

C:\Python34\lib\site-packages\pandas\algos.pyd in pandas.algos._check_minp (pandas\algos.c:16394)()

ValueError: min_periods (1) must be <= window (0)

In [5]: expanding_mean(Series([]))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-b131e71cc033> in <module>()
----> 1 expanding_mean(Series([]))

C:\Python34\lib\site-packages\pandas\stats\moments.py in f(arg, min_periods, freq, center, **kwargs)
    825             return func(arg, window, minp, **kwds)
    826         return _rolling_moment(arg, window, call_cython, min_periods, freq=freq,
--> 827                                center=center, **kwargs)
    828
    829     return f

C:\Python34\lib\site-packages\pandas\stats\moments.py in _rolling_moment(arg, window, func, minp, axis, freq, center, how, args, kwa
rgs, **kwds)
    345         result = np.apply_along_axis(calc, axis, values)
    346     else:
--> 347         result = calc(values)
    348
    349     rs = return_hook(result)

C:\Python34\lib\site-packages\pandas\stats\moments.py in <lambda>(x)
    339     arg = _conv_timerule(arg, freq, how)
    340     calc = lambda x: func(x, window, minp=minp, args=args, kwargs=kwargs,
--> 341                           **kwds)
    342     return_hook, values = _process_data_structure(arg)
    343     # actually calculate the moment. Faster way to do this?

C:\Python34\lib\site-packages\pandas\stats\moments.py in call_cython(arg, window, minp, args, kwargs, **kwds)
    823         def call_cython(arg, window, minp, args=(), kwargs={}, **kwds):
    824             minp = check_minp(minp, window)
--> 825             return func(arg, window, minp, **kwds)
    826         return _rolling_moment(arg, window, call_cython, min_periods, freq=freq,
    827                                center=center, **kwargs)

C:\Python34\lib\site-packages\pandas\algos.pyd in pandas.algos.roll_mean (pandas\algos.c:25815)()

C:\Python34\lib\site-packages\pandas\algos.pyd in pandas.algos._check_minp (pandas\algos.c:16394)()

ValueError: min_periods (1) must be <= window (0)