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

如何将深层嵌套JSON转换为Pandas DataFrame?脚本修改指导

深层嵌套JSON转Pandas DataFrame的实现方案

核心问题分析

原脚本缺少API数据获取的关键步骤,且逻辑存在冗余(如循环内重复拼接DataFrame、else分支错误添加原数据),需要针对性修改来适配目标API的嵌套JSON结构。

修改后的完整脚本

import requests
import pandas as pd
import json

# 1. 从API获取嵌套JSON数据
api_url = "https://api.llama.fi/summary/fees/lyra?dataType=dailyFees"
response = requests.get(api_url)
response.raise_for_status()  # 确保请求成功
json_data = response.json()

# 2. 初始标准化JSON数据(处理第一层嵌套)
df = pd.json_normalize(json_data)

# 3. 展开并处理含列表的列
df_list = []
# 遍历所有列,检查是否包含列表类型数据
for col in df.columns:
    if df[col].apply(lambda x: isinstance(x, list)).any():
        # 展开列表列
        exploded_df = df.explode(col, ignore_index=True)
        # 对展开后的列再次标准化(处理列表内的嵌套结构)
        normalized_df = pd.json_normalize(json.loads(exploded_df.to_json(orient="records")))
        df_list.append(normalized_df)
    else:
        # 非列表列直接保留
        df_list.append(df[[col]])

# 拼接所有处理后的列
result = pd.concat(df_list, axis=1)

# 4. 清理剩余的列表类型列(如果还有未处理的深层嵌套)
list_columns = result.columns[result.applymap(lambda x: isinstance(x, list)).any()]
result = result.drop(list_columns, axis=1)

print(result.head())

关键修改点说明

  • 添加API数据获取:使用requests库请求目标API,确保数据来源正确
  • 优化类型判断:用isinstance替代type.eq,类型判断更严谨,兼容子类场景
  • 提升处理效率:仅在所有列处理完成后执行一次pd.concat,避免循环内重复拼接的性能损耗
  • 简化清理逻辑:直接筛选出含列表的列并删除,代码更简洁易懂
  • 分层标准化:先处理顶层嵌套,再展开列表后处理内层嵌套,完美适配深层JSON结构

针对目标API的特殊说明

目标API返回的JSON中,dailyFees字段是核心列表数据,上述脚本会自动展开该列并标准化其中的嵌套字段(如tokens、fees等子结构),最终生成完全扁平化的DataFrame。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:25:11