如何从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
相关产品推荐
相关产品推荐

