已有股票代码列表与调整收盘价,如何获取名称、行业并生成DataFrame存Excel
批量获取股票名称与行业信息并保存至Excel
你已经通过代码成功获取了股票的调整收盘价,现在要批量获取每个股票代码对应的名称和行业信息,整理后存入Excel,我来给你一步步实现:
实现思路
- 先创建一个空列表,用来存储每只股票的代码、名称和行业信息
- 遍历你的股票代码列表,用
yf.Ticker()逐个获取股票的详情信息 - 提取需要的
shortName(股票名称)和sector(行业)字段,注意处理可能的异常情况(比如部分股票可能没有行业信息,或者接口请求失败) - 将收集到的数据转换成DataFrame,最后写入Excel文件(可以和调整收盘价放在同一个文件的不同工作表)
完整代码示例
结合你现有的代码,补充后的完整代码如下:
import pandas as pd import datetime as dt from pandas_datareader import data as web import yfinance as yf yf.pdr_override() # 读取股票列表 filename=r'C:\Users\User\Desktop\from_python\data_from_python.xlsx' yeah = pd.read_excel(filename, sheet_name='entry') stock = [] stock = list(yeah['name']) stock = [ s.replace('\xa0', '') for s in stock if not pd.isna(s) ] # --- 新增:批量获取股票名称与行业信息 --- # 初始化存储数据的列表 stock_info_list = [] for symbol in stock: try: ticker = yf.Ticker(symbol) # 提取股票名称和行业,用get方法避免字段缺失报错 stock_name = ticker.info.get('shortName', '无名称') sector = ticker.info.get('sector', '无行业') # 添加到列表 stock_info_list.append({ '股票代码': symbol, '股票名称': stock_name, '行业': sector }) print(f"已获取 {symbol} 的信息") except Exception as e: print(f"获取 {symbol} 信息失败: {e}") # 失败时也记录代码,标注异常 stock_info_list.append({ '股票代码': symbol, '股票名称': '获取失败', '行业': '获取失败' }) # 转换为DataFrame stock_info_df = pd.DataFrame(stock_info_list) # --- 完善原有获取调整收盘价的代码(补充缺失的start和end变量)--- start = dt.datetime(2023, 1, 1) # 可根据需求修改起始日期 end = dt.datetime(2023, 12, 31) # 可根据需求修改结束日期 adj_close=pd.DataFrame([]) for symbol in stock: adj_close[symbol] = web.get_data_yahoo([symbol],start,end)['Adj Close'] # --- 写入Excel,分不同工作表存储 --- with pd.ExcelWriter(filename, mode='a', if_sheet_exists='replace') as writer: stock_info_df.to_excel(writer, sheet_name='股票行业信息', index=False) adj_close.to_excel(writer, sheet_name='调整收盘价', index=True) print("所有数据已成功写入Excel!")
注意事项
- 补充了
start和end日期变量,你之前的代码里缺少这两个参数,运行时会报错,记得改成你需要的时间范围 - 加入了异常处理逻辑,避免某一只股票信息获取失败导致整个程序中断
- 使用
mode='a'和if_sheet_exists='replace'来追加工作表,如果原有文件里已经有同名工作表,会覆盖旧数据 - 像
^GSPC、NQ=F这类指数/期货标的可能没有sector字段,代码里用get()方法设置了默认值,避免出现KeyError
内容的提问来源于stack exchange,提问作者kenneth c




