我必须将一个非常大的(170万条记录)csv文件读入一个numpy记录数组。其中两列是需要转换为datetime对象的字符串。此外,一列需要是这些日期时间之间的计算差异。
目前我制作了一个自定义迭代器类,用于构建列表列表。然后我使用np.rec.fromrecords将其转换为数组。
然而,我注意到多次调用datetime.strptime()确实会减慢速度。我想知道是否有更有效的方法来进行这些转换。时间在日期范围内精确到秒。所以,假设时间是均匀分布的(它们不是),似乎我的转换次数要多20倍(170万/(60 X 60 X 24)。
将转换后的值存储在字典{string dates:datetime obj}中并在进行不必要的转换之前先检查字典会更快吗?
或者我应该使用numpy函数(我还是numpy库的新手?)
答案 0 :(得分:0)
我可能是错的,但在我看来,你的问题似乎是重复出现,因此进行相同的转换次数超过必要的次数。 IF 解释是正确的,最有效的方法取决于有多少重复。如果你在170万中有100,000次重复,那么将160万写入字典并检查170万次可能效率不高,因为它可以实现1.6 + 170万次读/写。但是,如果你有100万次重复,那么为那些人返回一个答案(O(1))而不是进行转换额外百万次会更快。
总而言之,python非常慢,你可能无法加速这一点,因为你使用了170万输入。至于numpy功能,我也不是那么精通,但我相信在网上有一些很好的文档。