Python 3.x timedelta方法的缓慢性能
为什么Python 3.x timedelta方法的缓慢性能,python-3.x,pandas,Python 3.x,Pandas,为什么.dt.days比.dt.total_seconds()长100倍 .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
.dt.days
比.dt.total_seconds()长100倍
.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对象()构造的缓慢的listcomp中:
对我来说,这尖叫着“看,让我们把它纠正过来,当我们开始时,我们将跨越优化的桥梁。”一个更快的选择是days=pd.Series(df['A'].dt.values.astype('timedelta64[D]'))
这些没有太多性能基准-欢迎打开一个问题(公关更好!);这些都很容易优化
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)
360 else:
361 result = np.array([getattr(Timedelta(val), m)
--> 362 for val in values], dtype='int64')
363 return result
364