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

VisibleDeprecationWarning报错排查:Python金融数据爬取代码求助

问题排查请求

遇到赋值维度不匹配类错误,同时收到警告:
VisibleDeprecationWarning: specify 'dtype=object' when creating the ndarray. arr_value = np.asarray(value)

烦请排查以下代码中的问题:

获取标普500股票列表代码

import requests
import pandas as pd

url = 'https://www.slickcharts.com/sp500'
headers = {"User-Agent" : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}

request = requests.get(url, headers = headers)
data = pd.read_html(request.text)[0]
stk_list = data.Symbol
stk_list = data.Symbol.apply(lambda x: x.replace('.', '-'))
stk_list

获取股票基本面数据代码

import yfinance as yf
import time
stk_basic_data = yf.Ticker('AAPL').info
stk_basic_data
info_columns = list(stk_basic_data.keys())
stk_info_df = pd.DataFrame(index = stk_list.sort_values(), columns = info_columns)
failed_list = []

for i in stk_info_df.index:
    try:        
        print('processing: ' + i)
        info_dict = yf.Ticker(i).info
        columns_included = list(info_dict.keys())
        intersect_columns = [x for x in info_columns if x in columns_included]
        stk_info_df.loc[i,intersect_columns] = list(pd.Series(info_dict 
        [intersect_columns].values)
        time.sleep(1)
        
    except:
        failed_list.append(i)
        continue
问题分析与修复方案

1. 直接触发错误的语法问题

第二部分代码中,list(pd.Series(info_dict[intersect_columns].values))缺少一个右括号,导致语法解析失败,这是截图错误的直接原因。修正后代码:

stk_info_df.loc[i,intersect_columns] = list(pd.Series(info_dict[intersect_columns]).values)

2. VisibleDeprecationWarning警告修复

警告是因为pandas在将混合类型数据(字符串、数字、空值等)转为numpy数组时,未指定dtype=object。推荐直接用列表推导式提取值,避免不必要的类型转换:

stk_info_df.loc[i, intersect_columns] = [info_dict[col] for col in intersect_columns]

如果坚持使用Series方式,需明确指定dtype:

stk_info_df.loc[i,intersect_columns] = pd.Series(info_dict[intersect_columns], dtype=object).tolist()

3. 额外优化建议

  • 减少重复实例化:yf.Ticker(i)可以只创建一次,避免重复调用接口
  • 精准异常捕获:替换宽泛的except:为具体异常类型(如requests.exceptions.RequestException、KeyError),便于定位问题

优化后的循环代码示例:

for i in stk_info_df.index:
    try:        
        print('processing: ' + i)
        ticker = yf.Ticker(i)
        info_dict = ticker.info
        # 逐个赋值,避免类型转换问题
        for col in intersect_columns:
            stk_info_df.loc[i, col] = info_dict.get(col, None)
        time.sleep(1)
        
    except Exception as e:
        print(f"处理{i}时出错: {str(e)}")
        failed_list.append(i)
        continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:45:35