2014-01-20 40 views
0

如果被应用到空数据框将抛出一个异常,则返回一个空 数据框:Pandas:DataFrame.apply(f,axis = 1)在一个空的DataFrame上会忽略异常?

>>> import pandas as pd 
>>> def raise_exc(*a, **kw): 
... raise Exception() 
... 
>>> empty = pd.DataFrame({"a": []}) 
>>> empty.apply(raise_exc, index=1) 
Empty DataFrame 
Columns: [a] 
Index: [] 

这是为什么?是否有任何理由返回一个空的DataFrame,而不是重新抛出异常(如DataFrame不为空)或返回一个Series(如通常那样)?

+0

可能只是一个没有测试的边缘情况。 –

回答

0

挖掘到大熊猫源,它看起来像这样是罪魁祸首:

if not all(self.shape): 
    # How to determine this better? 
    is_reduction = False 
    try: 
     is_reduction = not isinstance(f(_EMPTY_SERIES), Series) 
    except Exception: 
     pass 

    if is_reduction: 
     return Series(NA, index=self._get_agg_axis(axis)) 
    else: 
     return self.copy() 

所以,事实上,熊猫是试图将智能和猜测它是否应该返回DataFrameSeries,和例外是抛弃东西。

我想补丁是有序的。