2014-10-10 46 views
1

如果我有熊貓這樣一個空的數據框中:爲什麼mean()在空的DataFrame上有不同的行爲?

df = pandas.DataFrame(columns=['a','b','c']) 
>>> df 
Empty DataFrame 
Columns: [a, b, c] 
Index: [] 

和我聚集在團體,輸出將通常是一個空數據幀:

>>> 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上使用熊貓0.14.1。

+0

如果你看看源代碼,你會看到如何創建不同的方法,並稱爲 – 2014-10-10 20:46:06

回答

1

這個異常是針對真正的groupby函數提出的:http://pandas.pydata.org/pandas-docs/stable/api.html#id35,當您調用sum時,這是調用沒有此限制的Series或df版本。

所以其實meanmediansemstdvarohlc都將引發異常。

另請注意,如果您有非數值數據,則會引發異常。

比較,當你調用與mean申請會發生什麼:

In [18]: 

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

這裏也不例外引發的系列或Df的版本被應用。

0

我不是很確定,但我會推測這是因爲mean()將被數據框中的元素數量除以0,這將導致被零除錯誤。我只是想知道拋出的錯誤

+0

我認爲你是正確的,'std()'和'var()'也會引發異常。 – Mike 2014-10-10 20:44:28

相關問題