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

为何循环获取的多份股票期权DataFrame仅最后一份存入Excel?

问题成因

  • 循环内部每次迭代都会直接给df_puts、df_calls重新赋值,上一轮循环获取的旧数据会被直接覆盖,循环结束后这两个变量仅存储最后一支股票的对应数据。
  • 写入Excel的操作放在了循环结束之后,自然只能写入最后一次迭代保留的数据。

修正后的代码

import pandas as pd
import os
from pandas import ExcelWriter

stocklist = pd.read_excel(filePath)
# 初始化两个空列表存储每轮生成的DataFrame
puts_data = []
calls_data = []

for i in stocklist.index:
    stock = str(stocklist["Symbols"][i])
    option_dict = options.get_options_chain(stock)
    df_puts = pd.DataFrame.from_dict(option_dict.get("puts"))
    df_calls = pd.DataFrame.from_dict(option_dict.get("calls"))
    # 新增股票代码列,方便后续区分数据归属
    df_puts["stock_code"] = stock
    df_calls["stock_code"] = stock
    # 将当前股票的DataFrame存入对应列表
    puts_data.append(df_puts)
    calls_data.append(df_calls)

# 合并所有股票的数据为总DataFrame
total_puts = pd.concat(puts_data, ignore_index=True)
total_calls = pd.concat(calls_data, ignore_index=True)

# 写入Excel
newFile = os.path.dirname(filePath1) + "/OptionsOutput.xlsx"
writer = ExcelWriter(newFile)
total_puts.to_excel(writer, "puts", float_format="%.3f", index=False)
total_calls.to_excel(writer, "calls", float_format="%.3f", index=False)
writer.save()

补充说明

  • 先将每轮的DataFrame存入列表最后再合并的写法,比循环中直接拼接DataFrame的性能更高,数据量越大优势越明显。
  • 新增的stock_code字段用于区分不同股票的数据,若不需要可以删除对应赋值行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:30:02