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

Python从嵌套字典JSON响应中高效提取数据生成DataFrame

高效提取JSON响应中'values'数据生成DataFrame的方案

问题场景

通过grequests批量获取JSON响应,核心代码如下:

def GetData():
    urlRespDict = {}
    for OrderNo in LookupNumbers['id']:
        urls1 = []
        for idno in ParameterList:
            urlTemp = url0_const + OrderNo + url1_const + idno + param1_const
            urls1.append(urlTemp)
        urlRespDict[OrderNo] = grequests.map((grequests.get(u) for u in urls1))
    return urlRespDict
  • 代码返回一个包含4个键的字典,每个键对应长度为136的响应列表
  • 单个响应解析后(如d1 = dict_responses['180378'][0].json())是嵌套字典的列表,目标是提取其中values字段的数据:将values的键作为DataFrame列,对应值作为行数据

现有方案的问题

此前尝试用apply(pd.Series)处理,代码如下,但因逐行处理开销大,耗时极长:

df2 = [(pd.DataFrame.from_records(n))['values'].apply(pd.Series,dtype="string") for n in df1]

高效替代方案

1. 批量提取所有values数据

先遍历所有响应,把需要的values字典统一收集到列表中:

# 初始化列表存储所有values字典
all_values = []
# 遍历字典中的每个订单号和对应的响应列表
for order_no, responses in dict_responses.items():
    for resp in responses:
        # 解析响应为JSON格式
        json_data = resp.json()
        # 遍历JSON数据中的每个元素,提取values字段
        for item in json_data:
            all_values.append(item['values'])

2. 直接构造完整DataFrame

利用Pandas的矢量化构造方法,一次性生成目标DataFrame,速度远快于逐行处理:

import pandas as pd

# 直接用字典列表构造DataFrame,指定数据类型
result_df = pd.DataFrame(all_values, dtype="string")

进阶:保留订单号关联(可选)

如果需要将values数据和对应的订单号关联,可以修改提取逻辑,把订单号并入每行数据:

all_data = []
for order_no, responses in dict_responses.items():
    for resp in responses:
        json_data = resp.json()
        for item in json_data:
            # 合并订单号和values字典
            row_data = {'OrderNo': order_no, **item['values']}
            all_data.append(row_data)

# 构造包含订单号的DataFrame
result_df = pd.DataFrame(all_data, dtype="string")

性能优势说明

  • pd.DataFrame()直接基于字典列表构造属于矢量化操作,内部批量处理数据,避免了apply(pd.Series)逐行循环的高开销
  • 减少了多次创建小型DataFrame再合并的额外消耗,一次性完成完整数据结构的构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:54:36