.dt.days
为什么比.dt.total_seconds()
花费100倍?
df = pd.DataFrame({'a': pd.date_range('2011-01-01 00:00:00', periods=1000000, freq='1H')})
df.a = df.a - pd.to_datetime('2011-01-01 00:00:00')
df.a.dt.days # 12 sec
df.a.dt.total_seconds() # 0.14 sec
答案 0 :(得分:3)
.dt.total_seconds
基本上只是一个乘法,可以以numpythonic的速度执行:
def total_seconds(self):
"""
Total duration of each element expressed in seconds.
.. versionadded:: 0.17.0
"""
return self._maybe_mask_results(1e-9 * self.asi8)
然而,如果我们中止days
操作,我们会看到它在带有getattr和Timedelta对象构造(source)的慢listcomp中花费时间:
360 else:
361 result = np.array([getattr(Timedelta(val), m)
--> 362 for val in values], dtype='int64')
363 return result
364
对我来说这是一种尖叫"看,让我们把它弄清楚,当我们来到它时我们会越过优化桥。"