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

如何逐个写入数组值(DataFrame转CSV)?批量股票数据处理优化

批量处理海量股票符号写入CSV的优化方案

原代码处理少量股票符号(如['AAPL','GOOG','MSFT'])时运行正常,但处理50000个符号时,不仅耗时久,还容易因连接中断失败。手动按500个一组拆分执行会产生大量冗余代码,需要实现:

  • 自动批量处理所有符号,无需重复复制代码
  • 确保后续数据与首次获取的列标题对齐,解决列数不一致导致的数据错位

优化后的代码

import pandas as pd
from yahooquery import Ticker
from time import sleep
from itertools import islice

def chunked_iterable(iterable, size):
    """将可迭代对象按指定大小拆分块"""
    it = iter(iterable)
    while True:
        chunk = tuple(islice(it, size))
        if not chunk:
            break
        yield chunk

# 替换为你的50000个股票符号列表
symbols = ['AAPL','GOOG','MSFT'] + ['SYM{}'.format(i) for i in range(49997)]
output_file = 'output.csv'
chunk_size = 500  # 每组处理的符号数量
retry_times = 3   # 单组重试次数
base_columns = None  # 存储首次获取的基准列名

for chunk in chunked_iterable(symbols, chunk_size):
    success = False
    for _ in range(retry_times):
        try:
            ticker = Ticker(chunk)
            detail_data = ticker.summary_detail
            if not detail_data:
                print(f"组{chunk}未获取到数据,跳过")
                success = True
                break
            
            # 转换为DataFrame并转置
            df_chunk = pd.DataFrame(detail_data).T
            
            # 首次获取时记录基准列名并写入表头
            if base_columns is None:
                base_columns = df_chunk.columns.tolist()
                df_chunk.to_csv(output_file, index=True, header=True)
            else:
                # 后续组按基准列对齐,缺失列补NaN,多余列丢弃
                df_chunk = df_chunk.reindex(columns=base_columns)
                # 追加写入时跳过表头
                df_chunk.to_csv(output_file, mode='a', index=True, header=False)
            
            print(f"组{chunk}处理完成")
            success = True
            break
        except Exception as e:
            print(f"组{chunk}处理失败,错误:{str(e)},正在重试...")
            sleep(2)  # 重试前等待2秒避免频繁请求
    
    if not success:
        print(f"组{chunk}经过{retry_times}次重试仍失败,已跳过")

print("所有符号处理完成")

关键优化说明

  • 自动分组处理:通过chunked_iterable函数自动拆分符号列表,循环处理每组数据,无需手动复制代码块
  • 列对齐机制:首次处理时记录基准列名,后续所有数据都通过reindex对齐到基准列,缺失列填充NaN、多余列直接丢弃,彻底解决数据错位问题
  • 异常重试机制:每组数据处理失败时自动重试指定次数,重试前短暂等待,降低连接中断导致的失败概率
  • 可控写入逻辑:仅首组数据写入表头,后续追加时跳过表头,避免重复写入冗余表头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:10:34