Python Pytable需要快速日期转换器吗

Python Pytable需要快速日期转换器吗,python,numpy,pytables,Python,Numpy,Pytables,我必须将大量csv数据转换为pytable。我可以在5个小时内完成这项工作,只要我将日期存储为字符串。但是,这对查询操作没有用处,所以我希望它是一个整数,或者是一些使搜索更快的格式 以下是我尝试过的: 这很快,但pytables不会直接存储它,因为我使用numpy结构化数组编写,不接受“M8”类型。 使用astype转换为int64会大大降低进程的速度 太慢了。使总处理时间变为15小时 我只想用某种数字来表示从2000年开始的一天。我不需要几小时,几秒钟 有什么想法吗?我想知道您是否可以通过

我必须将大量csv数据转换为pytable。我可以在5个小时内完成这项工作,只要我将日期存储为字符串。但是,这对查询操作没有用处,所以我希望它是一个整数,或者是一些使搜索更快的格式

以下是我尝试过的:

  • 这很快,但pytables不会直接存储它,因为我使用numpy结构化数组编写,不接受“M8”类型。 使用astype转换为int64会大大降低进程的速度

  • 太慢了。使总处理时间变为15小时

  • 我只想用某种数字来表示从2000年开始的一天。我不需要几小时,几秒钟


    有什么想法吗?

    我想知道您是否可以通过使用慢速方法来改进这一点,但在计算后将结果缓存到字典中。因此1)检查一个(可能是全局的)字典,看看该字符串是否作为键存在;如果是,请使用该键的值。2) 如果不是,则计算字符串的日期。3) 将字符串/日期作为键/值添加到字典中,以便下次使用。假设你有很多重复项,这是必须的(因为听起来你有一大堆数据,而且从2000年到现在没有那么多不同的日子),那么你会得到一个惊人的缓存命中率。从字典中提取是一个O(1)操作;这将大大改善情况。

    这有点晚了,但我编写的基于快速Cython的转换器正是为了完成这类任务:

    本质上,您给它一个日期格式,它生成Cython代码,然后编译成Python扩展。这使得它非常快,请参见
    date\u converter\u generator.py
    中的示例:

    fdef1 = FunDef('convert_date_fast', '2014/01/07 10:15:08', year_offset=0,
                   month_offset=5, day_offset=8, hour_offset=11, minute_offset=14, second_offset=17)
    cg = ConverterGenerator([fdef1])
    cg.benchmark()
    

    好主意谢谢的确,有很多重复的日期。我试试看。
    ts = time.strptime(date, '%m/%d/%Y')
    calendar.timegm(ts)
    
    fdef1 = FunDef('convert_date_fast', '2014/01/07 10:15:08', year_offset=0,
                   month_offset=5, day_offset=8, hour_offset=11, minute_offset=14, second_offset=17)
    cg = ConverterGenerator([fdef1])
    cg.benchmark()