《Python for Finance》代码迁移:pandas_datareader获取Adj Close数组报错求助
解决Python for Finance示例迁移至yfinance的Adj Close获取问题
问题根源
asobject是旧版matplotlib.finance.quotes_historical_yahoo_ochl特有的参数,yfinance的download方法并不支持该参数,这是触发TypeError的原因。yfinance返回标准Pandas DataFrame,无需通过对象属性访问数据。
解决方案代码示例
import yfinance as yf import numpy as np # 定义目标股票与时间范围 ticker = 'AAPL' start_date = '2020-01-01' end_date = '2023-01-01' # 下载行情数据(yfinance默认包含Adj Close列) data = yf.download(ticker, start=start_date, end=end_date) # 提取Adj Close并转换为NumPy数组 adj_close_array = data['Adj Close'].to_numpy() # 计算简单日收益率 simple_returns = data['Adj Close'].pct_change().dropna().to_numpy() # 计算对数收益率(金融分析常用) log_returns = np.log(data['Adj Close'] / data['Adj Close'].shift(1)).dropna().to_numpy() # 输出示例结果 print("Adj Close数组前5项:", adj_close_array[:5]) print("简单收益率前5项:", simple_returns[:5])
关键说明
yfinance.download()返回的DataFrame默认包含Open、High、Low、Close、Adj Close、Volume列,直接通过列名['Adj Close']即可访问调整后收盘价。- 使用
to_numpy()将Pandas Series转换为NumPy数组,格式与原示例中p.aclose完全一致。 pct_change()方法自动计算当前值与前一交易日的变化率,dropna()用于移除首日无对比数据产生的空值。
内容的提问来源于stack exchange,提问作者dducatti
相关产品推荐
相关产品推荐

