如果我在像这样的pandas中有一个空的DataFrame:
df = pandas.DataFrame(columns=['a','b','c'])
>>> df
Empty DataFrame
Columns: [a, b, c]
Index: []
我在群组上聚合,输出通常是一个空的DataFrame:
>>> df.groupby('a', as_index=False).sum()
Empty DataFrame
Columns: [a, b, c]
Index: []
我说通常是,因为情况并非总是这样。它对min()
,max()
,sum()
,count()
和quantile()
采用这种方式,但对于mean()
则不行,会引发异常:
>>> df.groupby('a', as_index=False).mean()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/pandas/core/groupby.py", line 666, in mean
return self._cython_agg_general('mean')
File "/usr/local/lib/python2.7/site-packages/pandas/core/groupby.py", line 2358, in _cython_agg_general
new_items, new_blocks = self._cython_agg_blocks(how, numeric_only=numeric_only)
File "/usr/local/lib/python2.7/site-packages/pandas/core/groupby.py", line 2408, in _cython_agg_blocks
raise DataError('No numeric types to aggregate')
pandas.core.groupby.DataError: No numeric types to aggregate
为什么这个聚合函数的行为不同?
我在python 2.7上使用pandas 0.14.1。
答案 0 :(得分:1)
这个异常是针对真正的groupby函数引发的:http://pandas.pydata.org/pandas-docs/stable/api.html#id35,当你调用sum时,这是调用没有这种限制的Series或df版本。
事实上,mean
,median
,sem
,std
,var
和ohlc
都会引发异常。
另请注意,如果您有非数字数据,则会引发异常。
比较使用mean
调用apply时发生的情况:
In [18]:
df.groupby('a', as_index=False).apply(mean)
Out[18]:
Empty DataFrame
Columns: []
Index: []
这里没有引发异常,因为正在应用Series或Df版本。
答案 1 :(得分:0)
我不确定,但我会假设它,因为mean()
会除以数据帧中的元素数量,在这种情况下为0.这将导致除以零错误。我会抓住引发的错误