使用Python pandas提取嵌套JSON API数据报错及实现求助
错误原因说明
你之前代码报错的核心问题有两个:
- 拿到的API响应是bytes类型,没有解码转成Python字典,直接传入
json_normalize无法识别JSON结构 - 参数写法不符合规则:
['Data']['time', 'high', 'low', 'close']属于非法列表索引写法,相当于给列表传入元组作为索引,直接触发TypeError;['Data'][3]的写法也错误,列表['Data']只有1个元素,不存在索引为3的项。
正确实现代码
import pandas as pd import json # 原始API返回的bytes内容 res = b'{"Response":"Success","Message":"","HasWarning":false,"Type":100,"RateLimit":{},"Data":{"Aggregated":false,"TimeFrom":1629936000,"TimeTo":1630800000,"Data":[{"time":1629936000,"high":49358.2,"low":46456.68,"open":48996.44,"volumefrom":34276.36,"volumeto":1618461768.41,"close":46852.22,"conversionType":"direct","conversionSymbol":""},{"time":1630022400,"high":49166.31,"low":46376.81,"open":46852.22,"volumefrom":27872.76,"volumeto":1331637984.84,"close":49088.1,"conversionType":"direct","conversionSymbol":""}]}}' # 第一步:解码bytes并转换为Python字典 data = json.loads(res.decode("utf-8")) # 第二步:解析嵌套JSON生成DataFrame df = pd.json_normalize( data, record_path=["Data", "Data"] # 对应嵌套层级中的行情数组 ) # 第三步:筛选目标字段,处理时间格式 df = df[["time", "close", "high", "low"]] # 把Unix时间戳转为"%Y-%m-%d"格式的日期 df["time"] = pd.to_datetime(df["time"], unit="s").dt.strftime("%Y-%m-%d") # 将日期设为索引,匹配你需要的输出格式 df = df.set_index("time") print(df)
输出结果
close high low time 2021-08-26 46852.22 49358.20 46456.68 2021-08-27 49088.10 49166.31 46376.81
内容的提问来源于stack exchange,提问作者Alexander Thomsen
相关产品推荐
相关产品推荐

