从Yahoo Finance下载基本面数据触发AttributeError如何解决
问题解决办法
错误原因
get_stats_valuation是yahoo_fin.stock_info模块提供的方法,你之前导入statsmodels.api时给了别名sm,用sm调用这个不属于statsmodels的方法,自然会触发AttributeError。
修复步骤
- 先正确安装依赖库,注意pip命令如果写在Python代码文件里会报错,如果你用Jupyter Notebook可以在命令前加
!,否则直接在终端运行:
pip install yahoo_fin requests_html
- 修正导入和调用逻辑,正确写法如下:
# 导入所需库 import pandas as pd import numpy as np import requests import xlsxwriter from scipy import stats import math import secrets import yfinance as yf import matplotlib.pyplot as plt import datetime as dt import statsmodels.api as sm # 该库为统计建模工具,和获取Yahoo基本面数据无关 # 导入yahoo_fin的股票信息模块 from yahoo_fin.stock_info import get_stats_valuation, get_data # 读取股票成分表 stocks = pd.read_csv('constituents.csv') # 正确调用获取估值数据的方法 aapl_valuation = get_stats_valuation("aapl") print(aapl_valuation)
提取所需基本面指标
你需要的PE、PB、EV/EBITDA数据都在返回的aapl_valuation表里,可直接按行提取对应数值:
# 转成字典方便取值 val_dict = dict(zip(aapl_valuation.iloc[:,0], aapl_valuation.iloc[:,1])) # 提取对应指标 pe_ratio = val_dict.get('Trailing P/E') pb_ratio = val_dict.get('Price/Book') ev_ebitda = val_dict.get('EV/EBITDA') print(f"苹果PE比率:{pe_ratio}") print(f"苹果PB比率:{pb_ratio}") print(f"苹果EV/EBITDA:{ev_ebitda}")
内容的提问来源于stack exchange,提问作者Vidushi
相关产品推荐
相关产品推荐

