为什么mean()在空DataFrame上有不同的行为?

时间:2014-10-10 20:29:49

标签: python pandas dataframe

如果我在像这样的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。

2 个答案:

答案 0 :(得分:1)

这个异常是针对真正的groupby函数引发的:http://pandas.pydata.org/pandas-docs/stable/api.html#id35,当你调用sum时,这是调用没有这种限制的Series或df版本。

事实上,meanmediansemstdvarohlc都会引发异常。

另请注意,如果您有非数字数据,则会引发异常。

比较使用mean调用apply时发生的情况:

In [18]:

df.groupby('a', as_index=False).apply(mean)
Out[18]:
Empty DataFrame
Columns: []
Index: []

这里没有引发异常,因为正在应用Series或Df版本。

答案 1 :(得分:0)

我不确定,但我会假设它,因为mean()会除以数据帧中的元素数量,在这种情况下为0.这将导致除以零错误。我会抓住引发的错误