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

已有股票代码列表与调整收盘价,如何获取名称、行业并生成DataFrame存Excel

批量获取股票名称与行业信息并保存至Excel

你已经通过代码成功获取了股票的调整收盘价,现在要批量获取每个股票代码对应的名称和行业信息,整理后存入Excel,我来给你一步步实现:

实现思路

  1. 先创建一个空列表,用来存储每只股票的代码、名称和行业信息
  2. 遍历你的股票代码列表,用yf.Ticker()逐个获取股票的详情信息
  3. 提取需要的shortName(股票名称)和sector(行业)字段,注意处理可能的异常情况(比如部分股票可能没有行业信息,或者接口请求失败)
  4. 将收集到的数据转换成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!")

注意事项

  • 补充了startend日期变量,你之前的代码里缺少这两个参数,运行时会报错,记得改成你需要的时间范围
  • 加入了异常处理逻辑,避免某一只股票信息获取失败导致整个程序中断
  • 使用mode='a'if_sheet_exists='replace'来追加工作表,如果原有文件里已经有同名工作表,会覆盖旧数据
  • ^GSPCNQ=F这类指数/期货标的可能没有sector字段,代码里用get()方法设置了默认值,避免出现KeyError

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

火山引擎 最新活动