比较if子句中的时间

时间:2016-05-20 11:14:00

标签: python python-2.7

我正在处理一个大型财务数据集(> 15gb)并尝试在公告时间之前和之后30分钟获取(写入CSV文件)报价。具体来说,我将有2个CSV文件,1个包含报价数据,1个包含收益公告时间戳。我尝试过以下代码:

import datetime
import csv

df1 = csv.DictReader(open('earning_announcements.csv'))
df2 = csv.DictReader(open('quote_data.csv'))

data_writer = csv.DictWriter(open('quotes_selected.csv', 'wb'), fieldnames=['RIC', 'Date[L]', 'Time[L]','Close Bid', 'No. Bids','Close Ask', 'No. Asks'])
data_writer.writeheader()

for row2 in df2:
    for row1 in df1:
        if (row2['RIC'][:3] == row1['RIC'] and 
            row2['Time'] < row1['Time'] and 
            (row2['Time'] >= (row1['Time']- datetime.timedelta(minutes=30)))):
            data_writer.writerow(row2)

我的earning_announcement.csv(df1)看起来像这样(其他列已被忽略):

RIC Date        Time
ACR 23-08-12    16:26:00
ACR 23-08-12    16:22:00
AEJ 25-02-11    15:34:00
AEJ 31-08-11    15:39:00
AEJ 29-02-12    16:10:00
AEJ 31-08-12    16:08:00
AFI 25-07-11    10:43:00

和quote_data.csv(df2)如下所示:

RIC Date        Time    Close Bid   No. Bids    Close Ask   No. Asks
ACR 20120823    15:52:00    3.89    0            3.9         0
ACR 20120823    15:52:05    3.89    0            3.9         0
ACR 20120823    15:52:10    3.89    1            3.9         0
ACR 20120823    15:52:15    3.89    0            3.9         0
ACR 20120823    15:52:20    3.89    0            3.9         1
ACR 20120823    15:52:25    3.89    0            3.9         1
ACR 20120823    15:52:30    3.89    5            3.9         0
ACR 20120823    15:52:35    3.89    0            3.9         0
ACR 20120823    15:52:40    3.88    17           3.89        6
ACR 20120823    15:52:45    3.88    3            3.89        7

注意:RIC是股票代码 我还想分类它是在公告时间戳之前还是之后(即创建一个说明之前/之后的列)但不知道如何。 你能帮帮我吗我真的很感激,如果我的代码太混乱,我很抱歉。 非常感谢你。

3 个答案:

答案 0 :(得分:0)

我可以在您的代码中看到两个可能的问题来源:

  1. 变量已被引用但未初始化
  2. 恕我直言 df1 读者应该在外循环的每次迭代中重新打开

答案 1 :(得分:0)

似乎代码中几乎没有愚蠢的错误。正如已经提到的那样,你还没有初始化&#39; row&#39;或者你可能拼写错误&#39; row1&#39; as&#39; row&#39;。

您在问题主题中提到过&#39;比较if子句中的时间&#39;但是你要在if中的第一个逻辑中分配值。请参阅基本操作员here的文档。

最后你也在比较同一行的值,不确定它是否是故意的。

答案 2 :(得分:0)

在您的问题中,您提到了一个数据集&gt; 15Gb,但在你的一条评论中,你指的是一个200 Gb的数据集,无论它是什么,通过csv文件读取都不是尝试这项任务的方法。
将数据集加载到数据库中并处理该数据集 这也将允许您预先选择哪些数据相关,哪些数据不相关。