我正在努力加快字符串到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构造函数,这比其他方法好得多?
答案 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