python выполняет итерацию по многоуровневому словарю

#python #loops #dictionary

Вопрос:

У меня есть структура данных с трехуровневым словарем, содержащим фреймы данных. Я пытаюсь перебрать фреймы данных и применить операции к фреймам данных. Что я на самом деле пытаюсь сделать — изменить цены акций в кадрах данных на 21-дневную доходность.

Я даже не могу заставить итерацию работать:

 for dte in df_usage['SPX']['Prices'].items():
    df_usage['SPX']['Prices'][dte] =  df_usage['SPX']['Prices'][dte].pct_change(lookback)
 

ВОЗВРАТ:

   File "<ipython-input-69-fce8ba1b2a72>", line 2, in <module>
    df_usage['SPX']['Prices'][dte] =  df_usage['SPX']['Prices'][dte].pct_change(lookback)

  File "C:Anacondalibsite-packagespandascoregeneric.py", line 1492, in __hash__
    ' hashed'.format(self.__class__.__name__))

TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
 

Я просмотрел много подобных вопросов, но не смог разобраться в этом — я очень новичок. Большое спасибо.

[отредактированный вопрос]

Комментарии:

1. Ну, эта ошибка говорит мне, что df_usage['SPX']['Prices'] это int уже, то есть это число, а не фрейм данных.

2. Я приношу свои извинения! Я идиот — ставлю их на ноль, когда валяю дурака. фактическая ошибка: ошибка типа: объекты «Фрейм данных» изменчивы, поэтому их нельзя хэшировать

Ответ №1:

Ответ был таков:

 for dte in df_usage['SPX']['Prices'].keys():
    df_usage['SPX']['Prices'][dte] =  df_usage['SPX']['Prices'][dte].pct_change(lookback)
 

Я использовал .items (), когда должен был использовать .keys() — так как в каждом из моих фреймов данных был элемент, на который указывалась дата, которая была ключом!