如何从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
错误原因
pd.DataFrame()的columns参数要求传入集合类型(如列表),直接传入单个字符串'close'不符合参数要求,触发TypeError。- 核心问题:
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
相关产品推荐
相关产品推荐

