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我看了源代码,但我很难找到解决方法。时间戳或时间戳的初始化在哪里?