我需要將Python中的十進制類型值存儲在一個pandas TimeSeries
/DataFrame
對象中。在TimeSeries/DataFrame上使用「groupby」和「mean」時,熊貓給了我一個錯誤。基於彩車下面的代碼工作得很好:如何在帶有Decimal類型值的pandas TimeSeries上使用平均方法?
[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
但是,如果做同樣的使用十進制值,而不是花車我得到一個錯誤:
[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
的錯誤消息是「GroupByError('沒有數字類型彙總')「。是否有機會在包含Decimal值的TimeSeries或DataFrame上使用標準聚合,如sum,mean和quantileon?
爲什麼doens't它的工作,並有機會有一個同樣快速的選擇,如果這是不可能的?
編輯:我剛剛意識到,大部分的其他功能(最大,最小,平均等),做工精細,但並非意味着功能我迫切需要:-(
我不是。當然,最近我也遇到過這個問題,我剛剛結束了將Decimal()值重新編碼爲浮點數,然後使用浮點數值創建了數據幀。 – reptilicus 2012-07-12 19:53:58