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

无需硬编码日期,将yfinance历史收盘价添加至DataFrame

问题

我用yfinance拉取了AAPL的资产负债表数据,代码如下:

import yfinance as yf

ticker_object = yf.Ticker('AAPL')
balancesheet = ticker_object.balancesheet

# 筛选指定行和列
selected_data = balancesheet.loc[['Share Issued', 'Tangible Book Value']]

selected_data

当前输出:
当前输出

我希望不需要硬编码日期,自动获取DataFrame中各列对应日期的收盘价,并把这些价格添加到DataFrame的最后一行,期望输出如下:
期望输出

附yfinance获取价格数据的示例代码:

import yfinance as yf

data = yf.download("AAPL", start="2017-01-01", end="2017-04-30")
data.head(3)

示例代码输出:
价格数据输出

解决方案

通过以下步骤可实现需求:

  • 提取资产负债表DataFrame中的财报日期列
  • 针对每个日期匹配对应收盘价(兼容非交易日场景)
  • 将收盘价数据作为新行添加到目标DataFrame

完整代码

import yfinance as yf
import pandas as pd

# 初始化ticker对象并获取资产负债表
ticker_object = yf.Ticker('AAPL')
balancesheet = ticker_object.balancesheet

# 筛选指定行数据
selected_data = balancesheet.loc[['Share Issued', 'Tangible Book Value']]

# 提取财报日期并转为datetime格式
report_dates = selected_data.columns.to_list()

# 循环获取每个财报日期对应的收盘价
close_prices = []
for date in report_dates:
    # 先尝试拉取当天的交易数据
    price_data = yf.download('AAPL', start=date, end=date + pd.Timedelta(days=1))
    if not price_data.empty:
        close_prices.append(price_data['Close'].iloc[0])
    else:
        # 若当天无交易(如周末/节假日),取最近一个交易日的收盘价
        price_data = yf.download('AAPL', end=date + pd.Timedelta(days=1)).tail(1)
        close_prices.append(price_data['Close'].iloc[0])

# 将收盘价作为新行添加到DataFrame
selected_data.loc['Close Price'] = close_prices

# 输出最终结果
selected_data

代码说明

  1. 日期提取:通过selected_data.columns直接获取资产负债表的财报日期,无需手动输入
  2. 收盘价匹配:优先拉取财报当天的收盘价,若当天无交易数据,自动取最近一个交易日的收盘价,避免数据缺失
  3. 添加新行:用loc方法将收盘价数据以Close Price为行名插入到筛选后的数据末尾

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:31:04