Python 为什么np.clip(pd.Series(范围(10)),2,3)返回一个序列?

Python 为什么np.clip(pd.Series(范围(10)),2,3)返回一个序列?,python,numpy,pandas,Python,Numpy,Pandas,类型(np.clip(pd.Series(范围(10)),2,3))是一种pd.Series type(np.clip(范围(10),2,3))是一个np.array 为什么pd.Series可以在应用numpy函数后保留其类型?pd.Series有一个clip方法() np.clip()遵从第一个参数的clip方法,如果它有一个: def clip(a, a_min, a_max, out=None): try: clip = a.clip except Att

类型(np.clip(pd.Series(范围(10)),2,3))
是一种
pd.Series

type(np.clip(范围(10),2,3))
是一个
np.array


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

pd.Series
有一个clip方法()

np.clip
()遵从第一个参数的
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)

这是一个“鸭子打字”的例子(如果它表现得像鸭子,它就会像鸭子一样嘎嘎叫……它就是鸭子!)。如果具有相同接口(例如,相同方法名)的对象可以以相同的方式处理,那么我们可以从代码中获得更多收益

因为
pd.Series
中的基础值是
np.array
<代码>类型(np.clip(pd.Series(范围(10)).values,2,3))给出
numpy.ndarray
@JianxunLi我知道我可以使用.value,但numpy怎么知道?
np.clip(pd.Series(range(10)), 2, 3)