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

如何更简洁地将指定JSON转换为Pandas DataFrame?

简化JSON转Pandas DataFrame的方案

我通过查询获取了如下JSON数据,需要将其中的groupData块转换为指定格式的Pandas DataFrame。目前已实现一套较为繁琐的转换方案,现寻求更简洁高效的解决办法。

原始JSON

r = {'metaData': [{'columnAliases': ['ltp', 'mcap', 'wsma30uptrend','15 day contraction'],
     'availableLimit': 477,
     'maxRows': 1,
     'isTrend': True,
     'limit': 2,
     'groups': ['symbol'],
     'tradeTimes': [1692210600000],
     'lastUpdateTime': 1692266340000}],
     'groups': ['BALRAMCHIN', 'GHCL'],
     'time': 138,
     'groupData': [{'name': 'BALRAMCHIN',
                    'results': [{'ltp': [394.6]}, {'mcap': [7938.8328]}, {'wsma30uptrend': [1]}, {'15 day contraction': [9.478]}]},
                   {'name': 'GHCL',
                    'results': [{'ltp': [516.1]}, {'mcap': [5048.8412]}, {'wsma30uptrend': [1]}, {'15 day contraction': [9.5524]}]}]}

期望输出

name        ltp         mcap        wsma30uptrend   15 day contraction
BALRAMCHIN  394.6       7938.83     1               9.478
GHCL        516.1       5048.84     1               9.5524

现有方案代码

df = pd.DataFrame(r['groupData'])
df = pd.concat([df.drop(['results'], axis=1), df['results'].apply(pd.Series)], axis=1)
for i in range(0, 4):
    df = pd.concat([df.drop([i], axis=1), df[i].apply(pd.Series)], axis=1)
df = df.explode('ltp')
df = df.explode('mcap')
df = df.explode('wsma30uptrend')
df = df.explode('15 day contraction')

优化后的简洁方案

可以通过遍历groupData中的每个条目,把name和results里的字段合并成字典,再直接构建DataFrame,同时处理列表取值和小数格式化:

import pandas as pd

# 提取groupData数据
group_data = r['groupData']

# 遍历每个条目,整理成标准字典格式
processed_data = []
for item in group_data:
    row = {'name': item['name']}
    # 合并results里的每个字典,取出列表中的唯一值
    for res in item['results']:
        key = list(res.keys())[0]
        row[key] = res[key][0]
    processed_data.append(row)

# 构建DataFrame并格式化小数位数
df = pd.DataFrame(processed_data)
df['mcap'] = df['mcap'].round(2)

print(df.to_string(index=False))

思路说明

  1. 直接遍历groupData的每个元素,无需多次拼接DataFrame,减少内存开销和代码复杂度
  2. 对每个results里的字典,提取键和对应列表的第一个值(因为每个列表只有一个元素)
  3. 最后统一构建DataFrame,按需格式化小数位数,一步到位得到目标格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:36:20