python 选择带有“开始”和“结束”日期的雅虎金融股票数据时,出现“字符串指数必须为整数”错误

i7uaboj4  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(153)

我想创建一个简单的脚本,用panda_datareader包从雅虎财经拉股票数据:

from pandas_datareader import data

stocks = data.DataReader('MSFT', 'yahoo', start='2020-01-14', end='2023-01-14')

但代码会显示“字符串索引必须为整数”的TypeError消息

TypeError                                 Traceback (most recent call last)
Cell In[1], line 3
      1 from pandas_datareader import data
----> 3 stocks = data.DataReader('MSFT', 'yahoo', start='2020-01-14', end='2023-01-14')

File c:\Users\der_L\anaconda3\envs\py39\lib\site-packages\pandas\util\_decorators.py:211, in deprecate_kwarg.<locals>._deprecate_kwarg.<locals>.wrapper(*args, **kwargs)
    209     else:
    210         kwargs[new_arg_name] = new_arg_value
--> 211 return func(*args, **kwargs)

File c:\Users\der_L\anaconda3\envs\py39\lib\site-packages\pandas_datareader\data.py:379, in DataReader(name, data_source, start, end, retry_count, pause, session, api_key)
    367     raise NotImplementedError(msg)
    369 if data_source == "yahoo":
    370     return YahooDailyReader(
    371         symbols=name,
    372         start=start,
    373         end=end,
    374         adjust_price=False,
    375         chunksize=25,
    376         retry_count=retry_count,
    377         pause=pause,
    378         session=session,
--> 379     ).read()
    381 elif data_source == "iex":
...
--> 153     data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
    154 except KeyError:
    155     msg = "No data fetched for symbol {} using {}"

TypeError: string indices must be integers

这个脚本和网上看到的几乎一样,但我不明白它有什么问题。

goqiplq2

goqiplq21#

开始日期和结束日期使用字符串。请用途:

import datetime  
  
start_date = datetime.datetime(2020, 1, 14)
end_date = datetime.datetime(2023, 1, 14)

然后在DataReader调用中使用这些参数

rkttyhzu

rkttyhzu2#

看起来pandas-datareader上有一个尚未更新的更改。错误报告可以在here中找到。作为一种解决方案,您可以使用yfinance包,如下所示。要使其正常工作,您应该使用pip install yfinance安装yfinance包。
然后,下面修改的代码应该设置一切进行.

from pandas_datareader import data
import yfinance as yfin

yfin.pdr_override()

stocks = data.get_data_yahoo('MSFT', start='2020-01-14', end='2023-01-14')

相关问题