Pandas计算个股阶段收益率 筛选指定时段收益率最高的10支股票
股票收益率Top10计算代码修正方案
原有代码核心问题
- 变量命名不符合Python规范:变量不能以
%开头,同时存在拼写错误,Gain_Loss和后续调用的Gain_Lost不一致 - 遍历逻辑错误:循环遍历股票代码时硬编码下载IBM的行情数据,没有将下载的收盘价赋值给变量存储,也没有关联对应股票代码
- 缺少异常处理:没有兼容股票代码无效、历史数据不足的场景,容易触发索引报错
- 排序逻辑错误:仅对收益率数值排序,没有关联对应股票代码,且默认升序不符合从高到低的需求
修正后完整代码
import numpy as np import pandas as pd import yfinance as yf # 读取股票列表 stock_list = pd.read_excel("Stocks.xlsx") # 如需返回股票名称,可在此处建立代码和名称的映射关系 # stock_name_map = dict(zip(stock_list["Stock code"], stock_list["Stock name"])) stock_code_List = stock_list["Stock code"] start_date = "2019-01-01" def top_10_stocks(start_date, stock_code_list): # 存储股票代码和对应收益率 stock_return_list = [] for code in stock_code_list: try: # 下载对应股票从起始日到当前的收盘价 close_series = yf.download(code, start=start_date)["Close"] # 过滤数据不足的股票 if len(close_series) < 2: continue # 计算区间收益率 gain_loss = ((close_series.iloc[-1] - close_series.iloc[0]) / close_series.iloc[0]) * 100 stock_return_list.append((code, gain_loss)) except Exception: # 跳过下载失败的股票 continue # 按收益率降序排序 stock_return_list.sort(key=lambda x: x[1], reverse=True) # 取前10支股票代码,如需返回名称可替换为 stock_name_map[item[0]] top_10 = [item[0] for item in stock_return_list[:10]] return top_10 # 调用函数输出结果 print(top_10_stocks(start_date, stock_code_List))
代码核心逻辑说明
- 遍历每支股票代码下载历史收盘价,兼容异常场景跳过无效股票
- 计算每支股票从起始日到最新收盘的区间涨跌幅
- 按涨跌幅从高到低排序后提取前10支股票信息返回
内容的提问来源于stack exchange,提问作者alexlaw888
相关产品推荐
相关产品推荐

