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

Python循环导出期权DataFrame到CSV仅显示最后一条数据如何解决?

问题根因

你的代码出现该问题有两个核心原因:

  • 循环过程中每次都重新给df变量赋值,会直接覆盖上一只股票生成的DataFrame数据
  • pandas的to_csv方法默认使用mode='w'(覆盖写入)模式,每次执行都会清空原有CSV文件内容再写入新数据,循环结束后文件里自然只剩下最后一次循环写入的AMZN股票数据

同时你当前的异常捕获逻辑存在问题:except块内仅写ValueError没有任何处理逻辑,一旦拉取接口报错,chain变量未定义,后续生成DataFrame的代码会直接报错。

修复方案

这里提供两种适合初学者的修复方式:

方式1:循环过程中追加写入CSV

每次循环完成后把当前股票的数据追加到CSV末尾,仅第一次写入时保留表头:

import pandas as pd
from yahoo_fin import options

stocks = ['AAPL', 'AMZN']
# 自定义保存路径
save_path = r'C:\Users\etcetc\options.csv'
# 标记是否是第一次写入,用来控制表头输出
first_write = True

for stock in stocks:
    try:
        pd.set_option('display.max_columns', None)
        chain = options.get_options_chain(stock, 'October 15, 2021')
        print(chain['calls'])
    except Exception as e:
        # 接口拉取失败时打印提示,跳过当前股票继续执行
        print(f"{stock} 数据拉取失败,跳过:{e}")
        continue
    
    df = pd.DataFrame(chain['calls'], columns=['Contract Name', 'Last Trade Date', 'Strike', 'Last Price', 'Bid', 'Ask', 'Change', 'Volume', 'Implied Volatility'])
    # 新增股票代码列,方便后续区分不同股票的数据
    df.insert(0, 'Stock Code', stock)
    # 追加写入,第一次写加表头,后续不加
    df.to_csv(save_path, index=False, header=first_write, mode='a' if not first_write else 'w')
    # 第一次写入完成后修改标记
    if first_write:
        first_write = False

方式2:先合并所有数据再一次性导出

把每只股票的DataFrame先存到列表里,全部拉取完成后合并成一个大的DataFrame再导出,逻辑更清晰:

import pandas as pd
from yahoo_fin import options

stocks = ['AAPL', 'AMZN']
save_path = r'C:\Users\etcetc\options.csv'
# 用来存所有股票的DataFrame
df_list = []

for stock in stocks:
    try:
        pd.set_option('display.max_columns', None)
        chain = options.get_options_chain(stock, 'October 15, 2021')
        print(chain['calls'])
    except Exception as e:
        print(f"{stock} 数据拉取失败,跳过:{e}")
        continue
    
    df = pd.DataFrame(chain['calls'], columns=['Contract Name', 'Last Trade Date', 'Strike', 'Last Price', 'Bid', 'Ask', 'Change', 'Volume', 'Implied Volatility'])
    df.insert(0, 'Stock Code', stock)
    df_list.append(df)

# 合并所有数据
all_df = pd.concat(df_list, ignore_index=True)
# 一次性导出
all_df.to_csv(save_path, index=False, header=True)

如果要导出Excel格式,把最后一步的to_csv换成to_excel即可,注意需要提前安装openpyxl依赖:pip install openpyxl。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:03