为什么Timestamp构造函数是解析日期字符串的最快方法?

时间:2016-12-01 20:12:54

标签: python datetime pandas

我正在努力加快字符串到Timestamps的转换,我注意到使用Timestamp构造函数似乎是最快的方法:

import pandas as pd
from time import perf_counter as pc

test_time = '2016-12-01 19:44:47.891124'

t0 = pc()
for _ in range(100000):
    pd.Timestamp.strptime(test_time, '%Y-%m-%d %H:%M:%S.%f')
pc() - t0
# 1.6517095469753258

t0 = pc()
for _ in range(100000):
    pd.to_datetime(test_time)
pc() - t0
# 5.428138378018048

t0 = pc()
for _ in range(100000):
    pd.Timestamp(test_time)
pc() - t0
# 0.20555895700817928

我很惊讶构造函数实际上比strptime方法更高效,因为在后者中我们明确地说明了如何解析字符串。什么是Timestamp构造函数,这比其他方法好得多?

1 个答案:

答案 0 :(得分:2)

您正在使用的流程效率低下。您应该使用pd.to_datetime一次批量转换日期,而不是单独执行每个日期。

考虑以下设置:

test_dts = ['2016-12-01 19:44:47.891124']*10**5

您的时间基本上是一次解析一个日期:

%timeit [pd.to_datetime(dt) for dt in test_dts]
1 loop, best of 3: 5.33 s per loop

您应该只需一步批量转换它们:

%timeit pd.to_datetime(test_dts)
10 loops, best of 3: 31.6 ms per loop

使用pd.Timestamp单独执行每个操作的速度较慢:

%timeit [pd.Timestamp(dt) for dt in test_dts]
10 loops, best of 3: 166 ms per loop