tz_localize: KeyError: ('Азия / Сингапур', вы получили индекс 0)

Вот решение, которое будет работать со списком или аргументом типа dict без завивания:

def memoize(fn):
    """returns a memoized version of any function that can be called
    with the same list of arguments.
    Usage: foo = memoize(foo)"""

    def handle_item(x):
        if isinstance(x, dict):
            return make_tuple(sorted(x.items()))
        elif hasattr(x, '__iter__'):
            return make_tuple(x)
        else:
            return x

    def make_tuple(L):
        return tuple(handle_item(x) for x in L)

    def foo(*args, **kwargs):
        items_cache = make_tuple(sorted(kwargs.items()))
        args_cache = make_tuple(args)
        if (args_cache, items_cache) not in foo.past_calls:
            foo.past_calls[(args_cache, items_cache)] = fn(*args,**kwargs)
        return foo.past_calls[(args_cache, items_cache)]
    foo.past_calls = {}
    foo.__name__ = 'memoized_' + fn.__name__
    return foo

Обратите внимание, что этот подход может быть естественным образом распространен на любой объект, реализуя собственную хеш-функцию как особый случай в handle_item. Например, чтобы этот подход работал для функции, которая принимает набор в качестве входного аргумента, вы можете добавить к handle_item:

if is_instance(x, set):
    return make_tuple(sorted(list(x)))
2
задан user1342124 28 February 2019 в 02:18
поделиться

1 ответ

Как написано, ваш код ищет столбец с именем Asia/Singapore. Попробуйте вместо этого:

df['date'] = df['date'].dt.tz_localize('Asia/Singapore')
0
ответ дан Peter Leimbigler 28 February 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: