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

TD Ameritrade price history API返回JSON解析及空数据处理问题

TD Ameritrade Price History API返回值处理解答

1. JSON结构拆解思路验证

你的拆解思路完全正确。该API返回的顶层JSON结构明确包含3个字段:

  • candles:K线数据数组,每个元素对应单根K线的收盘价、时间戳、最高价、最低价、开盘价、成交量信息
  • empty:布尔值,标识当前请求是否返回有效K线数据,无数据时为true
  • symbol:当前请求的标的代码字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:00