我需要将 Python 十进制类型值存储在 pandas 中TimeSeries
/DataFrame
目的。在 TimeSeries/DataFrame 上使用“groupby”和“mean”时,Pandas 给我一个错误。以下基于浮动的代码效果很好:
[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 上使用标准聚合,例如总和、平均值和分位数?
为什么它不起作用?如果不可能的话,是否有机会有同样快速的替代方案?
编辑:我刚刚意识到大多数其他函数(最小值、最大值、中位数等)都可以正常工作,但不是我迫切需要的平均函数:-(。