如何逐个写入数组值(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
相关产品推荐
相关产品推荐

