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

如何从yahooquery嵌套DataFrame中提取日期与收盘价列?

解决yahooquery嵌套DataFrame提取date和close的问题

核心原因

你看到的date并非普通列,而是DataFrame的索引,所以调用df.keys()看不到它。yahooquery的history()方法返回的行情数据默认会把日期设为索引,行情字段作为列。

解决方案

1. 单只股票数据的处理

先获取WMT的历史数据:

from yahooquery import Ticker
import pandas as pd

wmt = Ticker('WMT')
# 可指定period参数,比如'1y'(1年)、'max'(全部历史)
df = wmt.history(period='1y')

将索引转为普通列,生成扁平化DataFrame:

# 重置索引,把date从索引转为列
df_flat = df.reset_index()
# 提取date和close列
target_df = df_flat[['date', 'close']]

此时target_df就是包含date和close的扁平化结构,直接通过target_df['date']或target_df.date即可访问日期列。

2. 多只股票数据的处理

如果同时获取多只股票数据,会生成多层索引(symbol和date),处理方式如下:

tickers = Ticker(['WMT', 'AAPL'])
df = tickers.history(period='1y')
# 重置多层索引,将symbol和date转为普通列
df_flat = df.reset_index()
# 筛选WMT的date和close数据
wmt_target = df_flat[df_flat['symbol'] == 'WMT'][['date', 'close']]

关于pd.json_normalize报错的说明

pd.json_normalize用于处理嵌套的JSON结构,但yahooquery的Ticker对象本身不是可直接解析的JSON格式,且history()方法已经返回了结构化的DataFrame,不需要用该方法处理Ticker对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:15:38