【发布时间】:2015-05-25 01:36:37
【问题描述】:
我似乎在 pandas.Timestamp 与 python 常规 datetime() 对象上的算术运算性能出乎意料地慢。
下面是一个演示基准:
import datetime
import pandas
import numpy
# using datetime:
def test1():
d1 = datetime.datetime(2015, 3, 20, 10, 0, 0)
d2 = datetime.datetime(2015, 3, 20, 10, 0, 15)
delta = datetime.timedelta(minutes=30)
count = 0
for i in range(500000):
if d2 - d1 > delta:
count += 1
# using pandas:
def test2():
d1 = pandas.datetime(2015, 3, 20, 10, 0, 0)
d2 = pandas.datetime(2015, 3, 20, 10, 0, 15)
delta = pandas.Timedelta(minutes=30)
count = 0
for i in range(500000):
if d2 - d1 > delta:
count += 1
# using numpy
def test3():
d1 = numpy.datetime64('2015-03-20 10:00:00')
d2 = numpy.datetime64('2015-03-20 10:00:15')
delta = numpy.timedelta64(30, 'm')
count = 0
for i in range(500000):
if d2 - d1 > delta:
count += 1
time1 = datetime.datetime.now()
test1()
time2 = datetime.datetime.now()
test2()
time3 = datetime.datetime.now()
test3()
time4 = datetime.datetime.now()
print('DELTA test1: ' + str(time2-time1))
print('DELTA test2: ' + str(time3-time2))
print('DELTA test3: ' + str(time4-time3))
以及我机器上对应的结果(python3.3,pandas 0.15.2):
DELTA test1: 0:00:00.131698
DELTA test2: 0:00:10.034970
DELTA test3: 0:00:05.233389
这是预期的吗?
除了尽可能将代码切换到 Python 的默认日期时间实现之外,还有其他方法可以消除性能问题吗?
【问题讨论】:
-
集中我的问题:我知道 pandas 和 numpy 用于矢量化处理。
-
问题出在应用程序中执行矢量处理的部分和处理离散值/事件的部分之间的接口:如果提供 pandas 日期时间表示,离散处理代码会受到影响。跨度>
-
好的,在这种情况下,如果您的基准测试代表您的用例,那么绝对没有理由使用 numpy 或 pandas 日期时间。下面我构建了一个替代示例,展示了 pandas datetime 会更快的情况。当然,我不能确定它在多大程度上代表了您的用例。
-
另外,您可能会考虑发布实际代码的简化版本,并询问是否有人有加快速度的想法。人们通常更容易对这类问题给出具体而实用的答案。
标签: python performance datetime numpy pandas