我正在跟随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
数据源信息可在此处找到。