Necesito almacenar los valores de tipo de decimal de Python en un objeto pandas TimeSeries
/DataFrame
. Pandas me da un error cuando uso el "groupby" y "mean" en el TimeSeries/DataFrame. El siguiente código basado en flotadores funciona bien:¿Cómo se usa el método de la media en una serie temporal de pandas con valores de tipo Decimal?
[0]: by = lambda x: lambda y: getattr(y, x)
[1]: rng = date_range('1/1/2000', periods=40, freq='4h')
[2]: rnd = np.random.randn(len(rng))
[3]: ts = TimeSeries(rnd, index=rng)
[4]: ts.groupby([by('year'), by('month'), by('day')]).mean()
2000 1 1 0.512422
2 0.447235
3 0.290151
4 -0.227240
5 0.078815
6 0.396150
7 -0.507316
pero me da un error si hacer las mismas utilizando valores decimales en lugar de flotadores:
[5]: rnd = [Decimal(x) for x in rnd]
[6]: ts = TimeSeries(rnd, index=rng, dtype=Decimal)
[7]: ts.groupby([by('year'), by('month'), by('day')]).mean() #Crash!
Traceback (most recent call last):
File "C:\Users\TM\Documents\Python\tm.py", line 100, in <module>
print ts.groupby([by('year'), by('month'), by('day')]).mean()
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 293, in mean
return self._cython_agg_general('mean')
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 365, in _cython_agg_general
raise GroupByError('No numeric types to aggregate')
pandas.core.groupby.GroupByError: No numeric types to aggregate
El mensaje de error es "GroupByError ('No hay tipos numéricos agregar')". ¿Hay alguna posibilidad de utilizar las agregaciones estándar como suma, media y cuantileon en TimeSeries o DataFrame que contienen valores decimales?
¿Por qué no funciona y existe la posibilidad de tener una alternativa igualmente rápida si no es posible?
EDIT: Me acabo de dar cuenta que la mayoría de las otras funciones (mínimo, máximo, mediana, etc.) funcionan bien, pero no la función significa que yo necesito desesperadamente :-(
no lo soy. Claro, pero también me encontré con ese problema recientemente. Acabo de refundir los valores Decimal() en flotantes y luego crear el marco de datos con los valores float. – reptilicus