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

如何基于yahooquery的asOfDate列向DataFrame添加adjclose价格列

解决方案:为财务数据添加对应日期的调整收盘价

核心思路

要实现将财报日期对应的调整收盘价(adjclose)整合到财务数据中,需完成数据格式统一、价格数据提取、数据集匹配合并三个关键步骤,具体实现如下:


完整代码实现

from yahooquery import Ticker
import pandas as pd

# 1. 获取并预处理财务数据
aapl = Ticker('AAPL')
types = ['asOfDate', 'TangibleBookValue', 'ShareIssued']
financial_data = aapl.get_financial_data(types, trailing=False)

# 移除冗余列,统一日期格式
columns_to_exclude = ['periodType', 'currencyCode']
financial_data.drop(columns=columns_to_exclude, inplace=True)
financial_data['asOfDate'] = pd.to_datetime(financial_data['asOfDate']).dt.date

# 2. 获取历史价格数据并预处理
price_ticker = Ticker('AAPL', asynchronous=True)
# 设置覆盖财报区间的时间范围,可按需调整
price_df = price_ticker.history(start='2018-01-01', end='2024-12-31')

# 拆解多层索引,提取日期与调整收盘价
price_df = price_df.reset_index()
price_df['date'] = pd.to_datetime(price_df['date']).dt.date
price_df = price_df[['date', 'adjclose']].rename(columns={'adjclose': 'AdjClose'})

# 3. 合并财务数据与价格数据
# 匹配财报日期对应的收盘价,处理非交易日空缺
financial_data = financial_data.merge(
    price_df,
    left_on='asOfDate',
    right_on='date',
    how='left'
).drop(columns=['date'])

# 用最近的前一个交易日价格填充非交易日空缺
financial_data['AdjClose'] = financial_data['AdjClose'].fillna(method='ffill')

# 调整列顺序,匹配目标输出样式
financial_data = financial_data[['asOfDate', 'TangibleBookValue', 'ShareIssued', 'AdjClose']]

print(financial_data)

关键细节说明

  • 日期格式统一:将财务数据的asOfDate和价格数据的date均转为纯日期类型,避免时间戳差异导致匹配失效。
  • 非交易日兼容:财报发布日期可能不是交易日,通过ffill方法用最近的前一个交易日收盘价填充空缺,保证数据完整性。
  • 索引处理:history方法返回多层索引结构,需通过reset_index()将日期转为普通列,才能与财务数据完成匹配。

内容的提问来源于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 21:12:59