【发布时间】:2012-07-21 02:54:54
【问题描述】:
我必须将一个非常大(170 万条记录)的 csv 文件读取到一个 numpy 记录数组中。其中两列是需要转换为日期时间对象的字符串。此外,一列需要是这些日期时间之间的计算差异。
目前我制作了一个自定义迭代器类,用于构建列表列表。然后我使用 np.rec.fromrecords 将其转换为数组。
但是,我注意到多次调用 datetime.strptime() 确实会减慢速度。我想知道是否有更有效的方法来进行这些转换。时间在日期范围内精确到秒。所以,假设时间是均匀分布的(它们不是),我似乎做了 20 倍的必要转换(170 万/(60 X 60 X 24)。
将转换后的值存储在字典 {string dates: datetime obj} 中并在进行不必要的转换之前先检查字典会更快吗?
或者我应该使用 numpy 函数(我还是 numpy 库的新手)?
【问题讨论】:
-
你能告诉我们在 csv 文件中使用什么日期格式吗?我认为
fromfunction()可以在这里提供帮助,但我需要更多信息。 -
如果所有这些都在一天之内,那么使转换变得更简单应该很容易。您只需要解析一次日期。之后,您只需像这样转换秒数:
lambda x: int(x[-11:-9]) * 3600 + int(x[-8:-6]) * 60 + int(x[-5:-3]) -
处理整个csv文件需要多长时间?
-
当前设计大约需要两分钟。