Рассмотрим небольшой MWE, взятый из другого вопроса:
DateTime Data
2017-11-21 18:54:31 1
2017-11-22 02:26:48 2
2017-11-22 10:19:44 3
2017-11-22 15:11:28 6
2017-11-22 23:21:58 7
2017-11-28 14:28:28 28
2017-11-28 14:36:40 0
2017-11-28 14:59:48 1
Цель состоит в том, чтобы скопировать все значения с верхней границей 1. Мой ответ использует np.clip
, который отлично работает.
np.clip(df.Data, a_min=None, a_max=1)
array([1, 1, 1, 1, 1, 1, 0, 1])
Или,
np.clip(df.Data.values, a_min=None, a_max=1)
array([1, 1, 1, 1, 1, 1, 0, 1])
Оба из них возвращают один и тот же ответ. Мой вопрос касается относительной производительности этих двух методов. Рассмотрим -
df = pd.concat([df]*1000).reset_index(drop=True)
%timeit np.clip(df.Data, a_min=None, a_max=1)
1000 loops, best of 3: 270 µs per loop
%timeit np.clip(df.Data.values, a_min=None, a_max=1)
10000 loops, best of 3: 23.4 µs per loop
Почему существует такое огромное различие между ними, просто называя values
на последнем? Другими словами...
Почему так много функций numpy на объектах pandas?