为什么我在尝试访问雅虎财经时收到"TypeError: String indices Must be integer"消息?



我正在跟随Python的Udemy课程;财经,不幸的是,在试图使用pandas_dataReader从雅虎调用股票数据时遇到了障碍。

这是我直接从jupyter笔记本中复制的代码

import numpy as np
import pandas as pd
from pandas_datareader import data as wb
PG = wb.DataReader('PG', data_source='yahoo', start='1995-1-1')

返回以下相当长的错误消息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~AppDataLocalTempipykernel_16532693660725.py in <module>
----> 1 PG = wb.DataReader('PG', data_source='yahoo', start='1995-1-1')
~anaconda3libsite-packagespandasutil_decorators.py in wrapper(*args, **kwargs)
205                 else:
206                     kwargs[new_arg_name] = new_arg_value
--> 207             return func(*args, **kwargs)
208 
209         return cast(F, wrapper)
~anaconda3libsite-packagespandas_datareaderdata.py in DataReader(name, data_source, start, end, retry_count, pause, session, api_key)
368 
369     if data_source == "yahoo":
--> 370         return YahooDailyReader(
371             symbols=name,
372             start=start,
~anaconda3libsite-packagespandas_datareaderbase.py in read(self)
251         # If a single symbol, (e.g., 'GOOG')
252         if isinstance(self.symbols, (string_types, int)):
--> 253             df = self._read_one_data(self.url, params=self._get_params(self.symbols))
254         # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
255         elif isinstance(self.symbols, DataFrame):
~anaconda3libsite-packagespandas_datareaderyahoodaily.py in _read_one_data(self, url, params)
151         try:
152             j = json.loads(re.search(ptrn, resp.text, re.DOTALL).group(1))
--> 153             data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
154         except KeyError:
155             msg = "No data fetched for symbol {} using {}"
TypeError: string indices must be integers

正如@Clasherkasten在评论中指出的,你可以:

import numpy as np
import pandas as pd
import yfinance as yf
yf.pdr_override() # <== that's all it takes :-)
from pandas_datareader import data as pdr
PG = pdr.get_data_yahoo('PG', start='1995-1-1')

或者,如果您仍然想使用您的代码,您可以通过将data_source = 'yahoo'替换为data_source = 'stooq'来获得相同的信息

stooq数据源信息可在此处找到。

相关内容

最新更新