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

使用pd.DataFrame从Morningstar获取股票数据返回NaN值求助

解决从Morningstar获取股票数据返回NaN的问题

我之前也碰到过一模一样的情况,问题根源出在Morningstar数据源返回的数据结构上——它默认返回的是带**多层索引(MultiIndex)**的DataFrame,直接提取Close列合并会导致索引对齐失败,最终全是NaN。下面是具体的解决步骤和修改后的代码:

问题原因分析

当你用data.DataReader(ticker, 'morningstar', ...)获取数据时,返回的DataFrame索引是(日期, 股票代码)的双层结构。如果直接提取data['Close']并构建新DataFrame,不同ticker的索引无法正确匹配,就会生成全NaN的结果。

修改后的代码

import pandas as pd
from pandas_datareader import data

all_data = {} 
for ticker in ['AAL', 'ALK','WTI']: 
    # 获取单只股票的完整数据
    stock_data = data.DataReader(ticker, 'morningstar', '2014-06-01','2016-06-13')
    # 移除第二层的股票代码索引,只保留日期作为唯一索引
    stock_data = stock_data.reset_index(level=1, drop=True)
    # 仅提取Close列存入字典
    all_data[ticker] = stock_data['Close']

# 构建包含三只股票收盘价的DataFrame
price = pd.DataFrame(all_data) 
print(price.head(5))

额外注意事项

  • 确保你的pandas_datareader是最新版本,旧版本可能存在Morningstar接口兼容问题,可以用pip install --upgrade pandas-datareader更新。
  • 如果仍然出现问题,可以尝试将日期参数转为datetime对象,比如start=pd.to_datetime('2014-06-01'),避免字符串格式解析错误。
  • 若后续Morningstar数据源停止支持,你可以考虑改用Yahoo Finance(data.DataReader(ticker, 'yahoo', ...))等替代数据源,这些数据源的返回结构更直观,不容易出现索引对齐问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:06