为什么np.clip(pd.Series(range(10)),2,3)返回一个系列?

时间:2015-07-02 12:48:00

标签: python numpy pandas

type(np.clip(pd.Series(range(10)), 2, 3))pd.Series

type(np.clip(range(10), 2, 3))np.array

为什么pd.Series可以在应用numpy函数后保持其类型?

1 个答案:

答案 0 :(得分:6)

pd.Series有一个剪辑方法(defined in pandas/core/generic.py)。

def clip(self, lower=None, upper=None, out=None, axis=None):
    ...
    result = self
    if lower is not None:
        result = result.clip_lower(lower, axis)
    if upper is not None:
        result = result.clip_upper(upper, axis)
    return result

np.clipdefined in numpy/core/fromnumeric.py)按照第一个参数clip方法,如果它有一个:

def clip(a, a_min, a_max, out=None):
    try:
        clip = a.clip
    except AttributeError:
        return _wrapit(a, 'clip', a_min, a_max, out)
    return clip(a_min, a_max, out)

Series.clip方法返回pd.Series,因此np.clip会返回pd.Series。 当然,这也表明你可以使用

pd.Series(range(10)).clip(2, 3)

而不是

np.clip(pd.Series(range(10)), 2, 3)

这是" duck-typing" (如果它像鸭子一样嘎嘎叫,就像鸭子一样......它是一只鸭子!)。如果具有相同接口的对象(例如,相同的方法名称)可以以相同的方式处理,我们可以从代码中获得更多的里程数。