我正在处理一个大型财务数据集(> 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是股票代码 我还想分类它是在公告时间戳之前还是之后(即创建一个说明之前/之后的列)但不知道如何。 你能帮帮我吗我真的很感激,如果我的代码太混乱,我很抱歉。 非常感谢你。
答案 0 :(得分:0)
我可以在您的代码中看到两个可能的问题来源:
答案 1 :(得分:0)
似乎代码中几乎没有愚蠢的错误。正如已经提到的那样,你还没有初始化&#39; row&#39;或者你可能拼写错误&#39; row1&#39; as&#39; row&#39;。
您在问题主题中提到过&#39;比较if子句中的时间&#39;但是你要在if中的第一个逻辑中分配值。请参阅基本操作员here的文档。
最后你也在比较同一行的值,不确定它是否是故意的。
答案 2 :(得分:0)
在您的问题中,您提到了一个数据集&gt; 15Gb,但在你的一条评论中,你指的是一个200 Gb的数据集,无论它是什么,通过csv文件读取都不是尝试这项任务的方法。
将数据集加载到数据库中并处理该数据集
这也将允许您预先选择哪些数据相关,哪些数据不相关。