You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用YahooFinancials拉取股票数据时遇'NoneType'下标错误求助

解决YahooFinancials拉取股票数据时的TypeError问题

你遇到的TypeError: 'NoneType' object is not subscriptable错误,核心原因是某个股票代码没有从Yahoo Finance拉取到有效数据,导致data[a]返回了None——当你尝试访问None['prices']时,自然就触发了这个错误。比如你列表里的BASWW可能是无效代码、已退市,或者Yahoo Finance没有收录该标的的历史数据。

解决步骤:

  1. 先排查无效代码
    你可以先打印拉取到的data,直观查看哪个股票对应的取值是None

    print(data)
    

    或者逐个测试代码,精准定位问题标的:

    for symbol in symbollist:
        yahoo_fin = YahooFinancials(symbol)
        temp_data = yahoo_fin.get_historical_price_data(start_date='2020-01-01', end_date='2020-04-26', time_interval='daily')
        if temp_data[symbol] is None:
            print(f"⚠️ 股票代码 {symbol} 无可用数据")
    
  2. 过滤无效数据,构建有效DataFrame
    在构建DataFrame前,先过滤掉data中取值为None的股票项,只处理有有效数据的标的:

    import pandas as pd
    import yfinance as yf
    from yahoofinancials import YahooFinancials
    import datetime
    
    # 导入CSV股票代码列表
    stocksmini = pd.read_csv('watchlistmini.csv')
    symbollist = stocksmini['Symbol'].tolist()
    
    # 拉取股票信息
    yahoo_financials = YahooFinancials(symbollist)
    data = yahoo_financials.get_historical_price_data(start_date='2020-01-01', end_date='2020-04-26', time_interval='daily')
    
    # 过滤掉无数据的股票
    valid_data = {symbol: info for symbol, info in data.items() if info is not None}
    
    # 构建最终的DataFrame
    test2 = pd.DataFrame({
        a: {x['formatted_date']: x['adjclose'] for x in valid_data[a]['prices']} 
        for a in valid_data
    })
    print(test2)
    

这样修改后,程序就会自动跳过那些无法获取数据的股票,避免触发None下标访问的错误。

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

火山引擎 最新活动