TD Ameritrade price history API返回JSON解析及空数据处理问题
TD Ameritrade Price History API返回值处理解答
1. JSON结构拆解思路验证
你的拆解思路完全正确。该API返回的顶层JSON结构明确包含3个字段:
candles:K线数据数组,每个元素对应单根K线的收盘价、时间戳、最高价、最低价、开盘价、成交量信息empty:布尔值,标识当前请求是否返回有效K线数据,无数据时为truesymbol:当前请求的标的代码字符串
2. 分支判断逻辑实现
你尝试将empty字段转为DataFrame失败,是因为empty是单个布尔值,不属于结构化数组,没有单独转DataFrame的必要,你可以在读取candles前先判断该字段状态做分支处理,避免后续操作报错,优化后代码如下:
import time import requests import pandas as pd # 定义请求载荷 payload = {'apikey': client_id, 'periodType':'day', 'period':'10', 'frequencyType':'minute', 'frequency':'1', 'needExtendedHoursData':'false'} # 发起请求 time.sleep(0.501) content = requests.get(url = endpoint, params = payload) # 先校验请求状态 if content.status_code == 200: data = content.json() # 核心分支:判断是否无有效数据 if data.get('empty', True): print(f"标的{data.get('symbol', '未知')}无可用K线数据") # 无数据时返回结构统一的空DataFrame,方便后续批量处理 hist = pd.DataFrame(columns=['close','datetime','high','low','open','volume','symbol','empty']) else: # 有数据时正常生成DataFrame,补充symbol、empty字段方便多标的合并 hist = pd.DataFrame(data['candles']) hist['symbol'] = data['symbol'] hist['empty'] = data['empty'] else: print(f"请求失败,状态码:{content.status_code}") hist = pd.DataFrame()
可选优化说明
如果需要批量处理多标的数据,上述代码生成的DataFrame字段完全统一,无论标的是否有数据,都可以直接用pd.concat合并所有标的的结果,不会出现字段缺失的问题。
内容的提问来源于stack exchange,提问作者J.Billman
相关产品推荐
相关产品推荐

