I have a pandas Series object populated with decimal dtype Decimal numbers. I would like to use the new pandas 0.8 function to reselect decimal time series as follows:
resampled = ts.resample('D', how = 'mean')
When I try this, I get the error "GroupByError: No numbereric to aggregate". I assume the problem is that np.mean is used internaly to re-configure the values, and np.mean is expecting a float instead of Decimals.
Thanks to the help of this forum, I was able to solve a similar question using groupBy and the apply function, but I would also like to use the cool resample function.
How to use middle method for pandas TimeSeries values ββwith decimal type?
Any idea how to solve this?
Here is the full ipython session generating the error:
In [37]: from decimal import Decimal In [38]: from pandas import * In [39]: rng = date_range('1.1.2012',periods=48, freq='H') In [40]: rnd = np.random.randn(len(rng)) In [41]: rnd_dec = [Decimal(x) for x in rnd] In [42]: ts = Series(rnd_dec, index=rng) In [43]: ts[0:3] Out[43]: 2012-01-01 00:00:00 -0.1020591335576267189022559023214853368699550628 2012-01-01 01:00:00 0.99245713975437366283216533702216111123561859130 2012-01-01 02:00:00 1.80080710727195758558139004890108481049537658691 Freq: H In [44]: type(ts[0]) Out[44]: decimal.Decimal In [45]: ts.resample('D', how = 'mean') --------------------------------------------------------------------------- GroupByError Traceback (most recent call last) C:\Users\THM\Documents\Python\<ipython-input-45-09c898403ddd> in <module>() ----> 1 ts.resample('D', how = 'mean') C:\Python27\lib\site-packages\pandas\core\generic.pyc in resample(self, rule, how, axis, fill_method, closed, label, convention, kind, loffset, l imit, base) 187 fill_method=fill_method, convention=convention, 188 limit=limit, base=base) --> 189 return sampler.resample(self) 190 191 def first(self, offset): C:\Python27\lib\site-packages\pandas\tseries\resample.pyc in resample(self, obj) 65 66 if isinstance(axis, DatetimeIndex): ---> 67 rs = self._resample_timestamps(obj) 68 elif isinstance(axis, PeriodIndex): 69 offset = to_offset(self.freq) C:\Python27\lib\site-packages\pandas\tseries\resample.pyc in _resample_timestamps(self, obj) 184 if len(grouper.binlabels) < len(axlabels) or self.how is not None: 185 grouped = obj.groupby(grouper, axis=self.axis) --> 186 result = grouped.aggregate(self._agg_method) 187 else: 188 # upsampling shortcut C:\Python27\lib\site-packages\pandas\core\groupby.pyc in aggregate(self, func_or_funcs, *args, **kwargs) 1215 """ 1216 if isinstance(func_or_funcs, basestring): -> 1217 return getattr(self, func_or_funcs)(*args, **kwargs) 1218 1219 if hasattr(func_or_funcs,'__iter__'): C:\Python27\lib\site-packages\pandas\core\groupby.pyc in mean(self) 290 """ 291 try: --> 292 return self._cython_agg_general('mean') 293 except GroupByError: 294 raise C:\Python27\lib\site-packages\pandas\core\groupby.pyc in _cython_agg_general(self, how) 376 377 if len(output) == 0: --> 378 raise GroupByError('No numeric types to aggregate') 379 380 return self._wrap_aggregated_output(output, names) GroupByError: No numeric types to aggregate
Any help is appreciated. Thanks Thomas