无需硬编码日期,将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
代码说明
- 日期提取:通过
selected_data.columns直接获取资产负债表的财报日期,无需手动输入 - 收盘价匹配:优先拉取财报当天的收盘价,若当天无交易数据,自动取最近一个交易日的收盘价,避免数据缺失
- 添加新行:用
loc方法将收盘价数据以Close Price为行名插入到筛选后的数据末尾
内容的提问来源于stack exchange,提问作者HTMLHelpMe
相关产品推荐
相关产品推荐

