如何将深层嵌套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
相关产品推荐
相关产品推荐

