Python 为什么时间戳构造函数是解析日期字符串的最快方法?
我正在加速字符串到时间戳的转换,我注意到使用时间戳构造函数似乎是实现这一点的最快方法:Python 为什么时间戳构造函数是解析日期字符串的最快方法?,python,datetime,pandas,Python,Datetime,Pandas,我正在加速字符串到时间戳的转换,我注意到使用时间戳构造函数似乎是实现这一点的最快方法: 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 #
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
我感到惊讶的是,构造函数实际上比
strtime
方法性能更好,因为在后者中,我们明确说明了如何解析字符串。时间戳构造函数做了什么比其他方法好得多 您使用的流程效率低下。您应该使用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
您使用的流程效率低下。您应该使用
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
这段代码读起来相当混乱。您可能不应该在python中设置这样的格式。您想知道吗?Pandas是开源的。@BrandonIbbotson该代码足以进行时间测试,但我已经对其进行了更新,使其更具吸引力readable@jonrsharpe我看了源代码,但我很难找到解决方法。时间戳或Timestamp的uu init uuu在哪里?这段代码读起来相当混乱。您可能不应该在python中设置这样的格式。您想知道吗?Pandas是开源的。@BrandonIbbotson该代码足以进行时间测试,但我已经对其进行了更新,使其更具吸引力readable@jonrsharpe我看了源代码,但我很难找到解决方法。时间戳或时间戳的初始化在哪里?