TypeError: объекты DataFrame изменяемы, поэтому они не могут быть хешированы - при создании словаря фреймов данных - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь создать словарь фреймов данных, импортированных из yahoo .

Это не работает:

import pandas_datareader.data as web
symbols = ['BTC-EUR','ETH-EUR' ]
dict_of_stock = { web.DataReader(s, "yahoo") for s in (symbols) }

Out:

/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __hash__(self)
  1797     def __hash__(self):
  1798         raise TypeError(
-> 1799             f"{repr(type(self).__name__)} objects are mutable, "
  1800             f"thus they cannot be hashed"
  1801         )

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

Однако это делает:

import pandas_datareader.data as web
symbols = ['BTC-EUR','ETH-EUR' ]

dict_of_stock = {}

for s in symbols:
   #do some calcs to get a dataframe called 'df'
   dict_of_stock[s] = web.DataReader(s, "yahoo")

В чем причина?

1 Ответ

2 голосов
/ 21 июня 2020

Измените эту строку:

dict_of_stock = { web.DataReader(s, "yahoo") for s in (symbols) }

To:

dict_of_stock = { s: web.DataReader(s, "yahoo") for s in (symbols) }

В вашем более раннем подходе ключ к словарю отсутствовал, и поэтому DataFrame предполагался как ключ. Это привело к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...