【发布时间】:2015-06-25 08:51:51
【问题描述】:
我有大量的 csv 数据文件,每个数据文件包含一个股票数天的报价数据,格式如下:
ticker DD/MM/YYYY time bid ask
XXX, 19122014, 08:00:08.325, 9929.00,9933.00
XXX, 19122014, 08:00:08.523, 9924.00,9931.00
XXX, 19122014, 08:00:08.722, 9925.00,9930.50
XXX, 19122014, 08:00:08.921, 9924.00,9928.00
XXX, 19122014, 08:00:09.125, 9924.00,9928.00
…
XXX, 30122014, 21:56:25.181, 9795.50,9796.50
XXX, 30122014, 21:56:26.398, 9795.50,9796.50
XXX, 30122014, 21:56:26.598, 9795.50,9796.50
XXX, 30122014, 21:56:26.798, 9795.50,9796.50
XXX, 30122014, 21:56:28.896, 9795.50,9796.00
XXX, 30122014, 21:56:29.096, 9795.50,9796.50
XXX, 30122014, 21:56:29.296, 9795.50,9796.00
…
我需要提取时间在一定范围内的任何数据行,例如:09:00:00 到 09:15:00。我目前的解决方案是简单地将每个数据文件读入数据框,按时间排序,然后使用 searchsorted 查找 09:00:00 到 09:15:00。如果性能不是问题并且我没有 1000 个文件等待处理,它可以正常工作。关于如何提高速度的任何建议?提前感谢您的帮助!!!
【问题讨论】:
-
鉴于您对解决方案的描述,您至少可以通过在读取它们时处理这些行而不是读取整个文件,进行排序然后处理它们来获得一些速度。因此,如果您只是在阅读时检查每行的时间是否在有效范围内,您将保存整个排序步骤,这可能非常慢。
-
我们在这里谈论多大?您可以将所有csv读入df列表,然后
concat它们都将索引设置为时间,然后使用df.loc[(df.index.time > '09:00:00') & (df.index.time < '09:15:00')]进行过滤,在加载它们时,您可以对索引进行排序并丢弃那些没有的反正有那个范围 -
是的,它肯定会起作用,但它不是和我一样慢吗?目前我正在处理大约 4 GB 的数据量,我可能会处理 80GB 的数据量。
标签: python performance csv pandas