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

如何自动化将美股标的添加至行业列表?求yfinance指令集

解决方案

一、获取美股标的列表(替代手动输入)

yfinance本身没有内置全量美股标的库,你可以从权威财经渠道(如标普官网、纳斯达克官网)下载美股成分股的CSV文件,再通过pandas读取为标的列表。例如:

import pandas as pd

# 假设你已下载标普500成分股CSV,'Symbol'列为标的代码
sp500_tickers = pd.read_csv('sp500_tickers.csv')['Symbol'].tolist()

如果只是测试,可以先手动整理一小部分标的代码组成列表,比如tickers = ['AAPL', 'MSFT', 'XOM', 'CVX']。

二、自动按行业归类标的并获取数据

修改原代码,实现自动遍历标的、按大行业(能源、基础材料等)分类、批量抓取数据:

import yfinance as yf
import pandas as pd
import time

# 1. 加载标的列表(替换成你的CSV路径或手动列表)
tickers = pd.read_csv('sp500_tickers.csv')['Symbol'].tolist()

# 2. 初始化行业分组字典,按需调整行业名称
industry_groups = {
    "能源": [],
    "基础材料": [],
    "可选消费": [],
    "必需消费": [],
    "医疗保健": [],
    "金融": [],
    "信息技术": [],
    "通信服务": [],
    "工业": [],
    "房地产": [],
    "公用事业": [],
    "未知行业": []
}

# 3. 定义处理单个标的的函数
def process_ticker(ticker):
    try:
        comp = yf.Ticker(ticker)
        # 获取大行业信息,避免KeyError用get方法
        sector = comp.info.get('sector', '未知行业')
        
        # 收集需要的基础数据
        ticker_data = {
            '代码': ticker,
            '公司名称': comp.info.get('longName', ticker),
            '动态PE': comp.info.get('forwardPE'),
            '静态PE': comp.info.get('trailingPE'),
            '贝塔系数': comp.info.get('beta'),
            '最新收盘价': comp.history(period='1d')['Close'].iloc[-1] if not comp.history(period='1d').empty else None
        }
        
        # 归类到对应行业组
        if sector in industry_groups:
            industry_groups[sector].append(ticker_data)
        else:
            industry_groups['未知行业'].append(ticker_data)
        
        print(f"已处理: {ticker}")
        # 加延迟避免请求过于频繁被限制
        time.sleep(0.5)
    except Exception as e:
        print(f"处理失败 {ticker}: {str(e)}")

# 4. 批量遍历所有标的
for ticker in tickers:
    process_ticker(ticker)

# 示例:输出能源行业的标的数据
print("\n=== 能源行业标的数据 ===")
for item in industry_groups['能源']:
    print(f"{item['公司名称']} ({item['代码']}): 动态PE={item['动态PE']}, 静态PE={item['静态PE']}, 贝塔={item['贝塔系数']}")

说明:

  • 用try-except捕获请求异常,避免单个标的失败导致程序中断
  • 用info.get(key, default)替代直接索引,防止字段缺失抛出KeyError
  • 添加time.sleep(0.5)降低请求频率,避免被Yahoo Finance限制
  • 数据存储为字典列表,方便后续导出为Excel或CSV

三、可靠的yfinance常用指令/字段列表

1. Ticker核心方法

  • yf.Ticker(ticker_code): 初始化单个标的对象
  • comp.history(period='1d', interval='1m'): 获取历史行情,常用参数:
    • period: 1d(1天), 5d(5天), 1mo(1月), 1y(1年), max(全部历史)
    • interval: 1m(1分钟), 5m(5分钟), 1h(1小时), 1d(1天)
  • comp.financials: 年度利润表
  • comp.quarterly_financials: 季度利润表
  • comp.balance_sheet: 年度资产负债表
  • comp.cashflow: 年度现金流量表
  • comp.dividends: 获取分红记录
  • yf.download(tickers_list, period='1y'): 批量下载多个标的行情,效率比逐个Ticker更高

2. comp.info常用关键字段

  • 行业分类:
    • sector: 大行业(如能源、基础材料)
    • industry: 子行业(如石油勘探生产)
  • 估值指标:
    • forwardPE: 动态市盈率
    • trailingPE: 静态市盈率
    • marketCap: 总市值
    • priceToBook: 市净率
  • 盈利指标:
    • earningsPerShare: 每股收益
    • profitMargins: 销售利润率
  • 风险指标:
    • beta: 贝塔系数
    • 52WeekHigh: 52周最高价
    • 52WeekLow: 52周最低价
  • 基本信息:
    • longName: 公司全称
    • website: 公司官网
    • phone: 联系电话

注意事项

  • yfinance的数据来自Yahoo Finance公开接口,部分标的可能存在字段缺失,务必用get方法获取字段
  • 批量请求时不要去掉延迟,否则容易被临时限制访问
  • 如果需要全量美股标的,优先从正规财经网站下载CSV,避免使用非正规爬虫工具

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:05:42