【发布时间】:2015-12-11 04:17:30
【问题描述】:
我有一长串日期字符串,例如['2011-01-01','2015-05-05']。在 n 个字符串的列表中,我需要选择第 i 个字符串并找到字符串 i:n 的最新日期。我可以这样做,但过程很慢,需要数小时才能列出数十万个字符串。 我缺少哪些代码优化?示例代码如下。
import numpy as np
d = np.random.choice(xrange(0, 1000), size=100000, replace=True).tolist()
d = [str(item) for item in d]
total = len(d)
for i in xrange(total):
this_slice = d[i:total]
greatest = max(this_slice)
if i % 1000 == 0: # To track progress
print i
这些例子进行得足够快。使用实际的日期字符串,而不是示例中的数字字符串,要慢得多。我已经精确地计时了执行时间,但是对于 600,000 个日期字符串,它似乎需要大约 30-60 分钟。
这是我的数据代码的更精确表示:
import pandas as pd
i = 0
rows = df.shape[0]
for date in df['date']: # date is 'YYYY-MM-DD'
this_slice = df['date'][i:rows]
df['new_date'] = max(this_slice)
if i % 1000 == 0: # To track progress
print i
i += 0
我已经将日期字符串转换为日期时间对象,使它们成为整数(首先删除了'-'),并且速度并没有更快。必须有更快的方法来编写此代码!
【问题讨论】:
-
你可以使用数据库吗?
-
看起来您正在使用 pandas。对吗?
-
将它们推入 SQLite 并使用您最喜欢的 orm。