#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() — так как в каждом из моих фреймов данных был элемент, на который указывалась дата, которая была ключом!