You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas Datareader获取Yahoo特斯拉股票数据时遇AttributeError

解决pandas_datareader拉取Yahoo股票数据的AttributeError问题

问题场景

尝试用pandas_datareader从Yahoo Finance拉取特斯拉(TSLA)2000-2016年的股票价格数据,执行代码后触发以下错误:
AttributeError: 'NoneType' object has no attribute 'group'

原代码

import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web

style.use ('ggplot')

start= dt.datetime(2000, 1, 1)
end= dt.datetime(2016,12,31)

df= web.DataReader('TSLA', 'yahoo', start, end)

完整报错信息

>>> df= web.DataReader('TSLA', 'yahoo', start, end)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/name/Python learning/Data visualisation and graphing/.venv/lib/python3.12/site-packages/pandas/util/_decorators.py", line 213, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/name/Python learning/Data visualisation and graphing/.venv/lib/python3.12/site-packages/pandas_datareader/data.py", line 379, in DataReader
    ).read()
      ^^^^^^
  File "/Users/name/Python learning/Data visualisation and graphing/.venv/lib/python3.12/site-packages/pandas_datareader/base.py", line 253, in read
    df = self._read_one_data(self.url, params=self._get_params(self.symbols))
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/name/Python learning/Data visualisation and graphing/.venv/lib/python3.12/site-packages/pandas_datareader/yahoo/daily.py", line 152, in _read_one_data
    j = json.loads(re.search(ptrn, resp.text, re.DOTALL).group(1))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'group'

原因分析

  • 核心原因:pandas_datareader的Yahoo数据源已停止维护,Yahoo Finance的页面结构和数据接口发生了变化,导致库内的正则匹配逻辑无法找到目标内容,返回None后调用group()方法触发错误。
  • Python 3.12不是直接诱因,但新版本与旧版pandas_datareader的兼容性问题可能加剧了该错误。

解决方法

方案1:改用yfinance库(推荐)

yfinance是目前专门维护、兼容Yahoo Finance的第三方库,稳定性和兼容性都远优于pandas_datareader的Yahoo模块。

  1. 安装yfinance:
pip install yfinance
  1. 修改后的代码:
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import yfinance as yf

style.use('ggplot')

start = dt.datetime(2000, 1, 1)
end = dt.datetime(2016, 12, 31)

# 拉取TSLA股票数据
df = yf.download('TSLA', start=start, end=end)
# 查看数据前5行
print(df.head())

说明:返回的数据格式与pandas_datareader完全兼容,后续的数据处理、可视化代码无需修改。

方案2:切换到其他支持的数据源(如Alpha Vantage)

若坚持使用pandas_datareader,可替换为仍在维护的数据源,比如Alpha Vantage(需免费API密钥):

  1. 前往Alpha Vantage官网申请免费API密钥
  2. 安装依赖(若未安装):
pip install pandas-datareader
  1. 代码示例:
import pandas_datareader.data as web
import datetime as dt

start = dt.datetime(2000, 1, 1)
end = dt.datetime(2016, 12, 31)

# 替换为你的Alpha Vantage API密钥
API_KEY = "你的API密钥"
df = web.DataReader('TSLA', 'av-daily', start=start, end=end, api_key=API_KEY)

说明:Alpha Vantage免费版有调用次数限制,适合小批量数据拉取。

方案3:降级Python和pandas_datareader(不推荐)

如果必须使用原技术栈,可尝试降级到兼容版本,但长期来看不稳定:

  1. 降级Python到3.11或更低版本
  2. 安装旧版pandas_datareader:
pip install pandas-datareader==0.10.0

说明:该方法仅能临时解决问题,Yahoo接口若继续更新,旧库仍会失效。

内容的提问来源于stack exchange,提问作者dog lover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:04:54