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

如何从Polygon期权API嵌套数据中提取close列生成DataFrame

解决Polygon期权API数据提取的TypeError问题

问题背景

通过Polygon期权快照API获取AAPL期权数据,目标是提取嵌套字典中day字段内的close值,生成仅包含该列的DataFrame,但现有代码执行时抛出TypeError错误。

现有代码

import requests, pandas as pd
optionchain_url = 'https://api.polygon.io/v3/snapshot/options/AAPL?expiration_date=2023-01-20&apiKey=9z9LDShn----Q9sQSj'
optionchain = requests.get(optionchain_url).json()
df = pd.DataFrame(optionchain['results'])
closedf = pd.DataFrame(df, columns='close')

错误信息

TypeError: Index(...) must be called with a collection of some kind, 'close' was passed

错误原因

  1. pd.DataFrame()的columns参数要求传入集合类型(如列表),直接传入单个字符串'close'不符合参数要求,触发TypeError。
  2. 核心问题:close值嵌套在每个期权条目的day子字典中,无法通过直接指定列名从全量DataFrame中提取。

正确代码方案

import requests
import pandas as pd

# 请求API数据
optionchain_url = 'https://api.polygon.io/v3/snapshot/options/AAPL?expiration_date=2023-01-20&apiKey=9z9LDShn----Q9sQSj'
response = requests.get(optionchain_url)
optionchain = response.json()

# 安全提取results列表,避免键不存在报错
results = optionchain.get('results', [])

# 遍历所有期权条目,提取day字段下的close值
close_values = [item.get('day', {}).get('close') for item in results]

# 生成仅含close列的DataFrame
closedf = pd.DataFrame({'close': close_values})

# 可选:查看前5行结果
print(closedf.head())

代码说明

  • 使用dict.get()方法:避免因键(如'results'、'day'、'close')不存在时抛出KeyError,提升代码健壮性。
  • 列表推导式直接提取目标值:无需先创建包含所有字段的大DataFrame,更高效。
  • 直接构建目标DataFrame:通过字典{'close': close_values}直接生成仅含所需列的DataFrame,逻辑清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:35:26