col*_*ang 2 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应用函数后可以保留其类型?
pd.Series有一个剪辑方法(在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
Run Code Online (Sandbox Code Playgroud)
np.clip(在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)
Run Code Online (Sandbox Code Playgroud)
该Series.clip方法返回一个pd.Series,所以np.clip返回一个pd.Series.当然,这也表明你可以使用
pd.Series(range(10)).clip(2, 3)
Run Code Online (Sandbox Code Playgroud)
代替
np.clip(pd.Series(range(10)), 2, 3)
Run Code Online (Sandbox Code Playgroud)
这是一个"鸭子打字"的例子(如果它像鸭子一样,像鸭子一样嘎嘎叫......它是一只鸭子!).如果具有相同接口的对象(例如,相同的方法名称)可以以相同的方式处理,我们可以从代码中获得更多的里程数.