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

《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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:09:58