如何将ThreadPoolExecutor获取的Yahoo财经数据导出至Excel?
将Yahoo Finance股票数据导出到Excel的解决方案
修改数据获取逻辑,收集结构化结果
原代码仅打印数据,我们需要让函数返回结构化数据,以便后续导出。同时添加异常处理,避免单个股票数据获取失败中断整体任务:
import yfinance as yf from concurrent.futures import ThreadPoolExecutor import pandas as pd def get_stats(ticker): try: info = yf.Tickers(ticker).tickers[ticker].info # 返回包含目标字段的字典,方便后续转换 return { '股票代码': ticker, '当前价格': info.get('currentPrice'), '市值': info.get('marketCap') } except Exception as e: print(f"获取{ticker}数据失败: {str(e)}") return { '股票代码': ticker, '当前价格': None, '市值': None } ticker_list = ['AAPL', 'ORCL', 'PREM.L', 'UKOG.L', 'KOD.L', 'TOM.L', 'VELA.L', 'MSFT', 'AMZN', 'GOOG'] # 收集所有线程返回的结果 with ThreadPoolExecutor() as executor: results = list(executor.map(get_stats, ticker_list))
导出结果到Excel
使用pandas可以快速将结构化数据转换为Excel文件,需要先安装依赖:
pip install pandas openpyxl
添加导出代码:
# 将结果转换为DataFrame格式 df = pd.DataFrame(results) # 导出到Excel文件,关闭索引列让表格更整洁 df.to_excel('股票数据.xlsx', index=False, engine='openpyxl') print("数据已成功导出到股票数据.xlsx")
完整可运行代码
import yfinance as yf from concurrent.futures import ThreadPoolExecutor import pandas as pd def get_stats(ticker): try: info = yf.Tickers(ticker).tickers[ticker].info return { '股票代码': ticker, '当前价格': info.get('currentPrice'), '市值': info.get('marketCap') } except Exception as e: print(f"获取{ticker}数据失败: {str(e)}") return { '股票代码': ticker, '当前价格': None, '市值': None } ticker_list = ['AAPL', 'ORCL', 'PREM.L', 'UKOG.L', 'KOD.L', 'TOM.L', 'VELA.L', 'MSFT', 'AMZN', 'GOOG'] with ThreadPoolExecutor() as executor: results = list(executor.map(get_stats, ticker_list)) df = pd.DataFrame(results) df.to_excel('股票数据.xlsx', index=False, engine='openpyxl') print("数据导出完成")
关键说明
- 用
info.get()替代直接索引,避免部分股票缺少目标字段时抛出KeyError - 异常捕获确保单个股票数据获取失败不会影响其他任务执行
index=False参数避免导出不必要的索引列,让Excel表格更简洁
内容的提问来源于stack exchange,提问作者user3444610
相关产品推荐
相关产品推荐

