可持续的熊猫DatetimeIndex

时间:2017-05-18 17:06:00

标签: python pandas hash memoization datetimeindex

我尝试使用foo(dti: DatetimeIndex)注释记住方法@functools.lru_cache()。但是,它抱怨TypeError: unhashable type: 'DatetimeIndex'

由于DatetimeIndex对象是不可变的,因此应该有一种很好的方法将它们用作记忆的关键,对吧?

另外,DatetimeIndex定义哈希方法只返回其id()会出现什么问题?

1 个答案:

答案 0 :(得分:0)

我最后编写了自己的装饰器,以便能够记住接受DataFrame个对象(或Hashable个对象的方法,以防DataFrame s将来可以使用),它看起来像这样:

def my_memoize(func):
    # TODO use an LRU cache so we don't grow forever
    cache = {}

    def decorating_function(self, arg):
        key = arg if isinstance(arg, collections.Hashable) else id(arg)
        key = (self, key)
        if key in cache:
            return cache[key]
        value = func(self, arg)
        cache[key] = value
        return value

    return decorating_function

我这样使用它:

@my_memoize
def calculate_stuff(self, df):
    ...