Mam obiekt pandas {x0}} wypełniony dziesiętną liczbą dziesiętnej Dype. Chciałbym użyć nowej funkcji PANDAS 0.8, aby ponownie zmienić serię czasu dziesiętnego, tak jak:

resampled = ts.resample('D', how = 'mean')

Podczas próby tego otrzymuję "GroupbyError: Brak typy numerycznych do agregatu". Zakładam, że problem jest taki, że NP.Mean jest używany interlali, aby ponownie zmienić wartości i NP.Mean oczekuje, że pływaki zamiast dziesiętnych.

Dzięki pomocy tego forum udało mi się rozwiązać podobne pytanie przy użyciu Groupby i funkcji Zastosuj, ale chciałbym również używać funkcji fajnej odpowiedzi.

Jak użyj średniej metody na czasach Pandas z wartościami typu dziesiętnego?

Masz jakiś pomysł, jak to rozwiązać?

Oto pełna sesja IPython tworząca błąd:

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

Każda pomoc jest doceniana. Dzięki, Thomas.

6
THM 1 sierpień 2012, 19:41

2 odpowiedzi

Najlepsza odpowiedź

Nie znalazłem odpowiedzi sam. Można dostarczyć funkcji "jak" argumentacja odpowiedzi:

f = lambda x: Decimal(np.mean(x))
ts.resample('D', how = f)
7
THM 1 sierpień 2012, 21:43

Otrzymuję błąd dla kolumn typu obiektu w Dataframe. Mam go dookoła, używając

df.resample('D', method='ffill', how=lambda c: c[-1])

0
user1827356 13 marzec 2013, 15:05