在时间戳数组上进行计算

时间:2016-02-29 11:46:29

标签: python arrays datetime

很容易在时间戳上执行计算:

from datetime import datetime
timestamp = 1456741175
dt = datetime.fromtimestamp(timestamp)
print(dt.day)
# Week day number
print(dt.weekday())
print(dt.minute)
print(dt.second)

但是,如果我的时间戳是一个数组,而不是一个值,那该怎么办?例如:

timestamp = [1456741175, 1456741176, 1456741177, ....]

使用循环,因为我的数组长度超过300万,所以需要花费很多时间。那么,如何使用简单快速的方法对时间戳数组执行相同的计算呢?

3 个答案:

答案 0 :(得分:2)

pandas 非常快。

# timestamps.py
from time import localtime
import pandas as pd

timestamps = range(1000000)    # 1,000,000 seconds starting from Jan 1, 1970

def test_pandas():
    datetimes = pd.to_datetime(timestamps, unit='s')
    # if you just want the week days
    week_days = datetimes.weekday

def test_time():
    week_days = [localtime(t).tm_wday for t in timestamps]

将执行时间与timeit

进行比较
$ python -m timeit -s 'import timestamps' 'timestamps.test_time()'
10 loops, best of 3: 2.11 sec per loop
$ python -m timeit -s 'import timestamps' 'timestamps.test_pandas()'
10 loops, best of 3: 357 msec per loop

Pandas比使用列表理解快6倍,它本身比接受答案中的map()解决方案快一点。

答案 1 :(得分:1)

可以使用multiprocessing库并行计算。它将产生许多进程并将输入值分配给那些进程。

您可以重写代码:

from multiprocessing import Pool
from datetime import datetime

def datetime_from_timestamp(timestamp):
    dt = datetime.fromtimestamp(timestamp)
    print(dt.day)

timestamps = [1456741175, 1456741176, 145674117]

pool = Pool(processes=4)
pool.map(datetime_from_timestamp, timestamps)

答案 2 :(得分:1)

e.g。

map(lambda x: datetime.fromtimestamp(x).weekday(), timestamp)