很容易在时间戳上执行计算:
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万,所以需要花费很多时间。那么,如何使用简单快速的方法对时间戳数组执行相同的计算呢?
答案 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)