如果应用于空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(就像通常那样)?
答案 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
,而例外就是抛弃它。
我想补丁是有序的。