timedelta方法的性能缓慢

时间:2016-08-12 23:55:55

标签: python-3.x pandas

.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

1 个答案:

答案 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 

对我来说这是一种尖叫"看,让我们把它弄清楚,当我们来到它时我们会越过优化桥。"