Pandas:DataFrame.apply(f,axis = 1)在空DataFrame上忽略异常?

时间:2014-01-20 03:03:53

标签: python pandas

如果应用于空DataFrame的函数引发异常,则为空 返回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(就像通常那样)?

1 个答案:

答案 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()

所以,事实上,熊猫正试图变得聪明,并猜测它是应该返回DataFrame还是Series,而例外就是抛弃它。

我想补丁是有序的。