pandas DataFrame导出CSV无法追加仅保存最后一条期权数据求助
问题排查与修复方案
核心错误原因
- 你将DataFrame构造、CSV写入的逻辑放在了
for循环外部,循环过程中chain变量会被每次新请求的股票期权数据覆盖,循环结束后仅保留最后一只股票的chain值,最终也只会写入这部分数据。
其他可优化的问题点
- 异常捕获逻辑无效:
except块中仅写了ValueError,既没有抛出异常也没有做跳过、日志记录,请求出错时不会有任何提示,也不会终止当前循环。 - 追加写入时设置
header=True会导致每写入一只股票的数据就重复生成一次表头,最终CSV文件里会穿插多个表头行。 pd.set_option不需要放在循环里重复执行,放到循环外部执行一次即可。
修正后代码
import pandas as pd import os # 全局配置只需要执行一次 pd.set_option('display.max_columns', None) stocks = ['AAPL','AMZN'] csv_path = r'C:\Users\etcetc' # 首次写入前如果文件存在可以先删除,避免重复追加旧数据,不需要的话可以删掉以下两行 if os.path.exists(csv_path): os.remove(csv_path) for stock in stocks: try: chain = options.get_options_chain(stock, 'October 15, 2021') print(f"{stock} 期权数据获取成功") # 构造DataFrame和写入逻辑放到循环内部 df = pd.DataFrame(chain, columns=['Contract Name', 'Last Trade Date', 'Strike', 'Last Price', 'Bid', 'Ask', 'Change', 'Volume', 'Implied Volatility']) # 仅首次写入时加表头,后续追加不加 header = not os.path.exists(csv_path) df.to_csv(csv_path, index=False, header=header, mode='a') except Exception as e: print(f"{stock} 数据获取失败,错误信息:{e}")
内容的提问来源于stack exchange,提问作者James Anderson
相关产品推荐
相关产品推荐

