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

Python新手求教:将嵌套JSON转换为指定格式的DataFrame

将嵌套JSON转换为DataFrame(无循环/手动指定列名)

原始数据

data = {
    "results": [
        {"values": [{"name": "firstname","value": "Fname1"},{"name": "lastname","value": "Lname1"}]},
        {"values": [{"name": "firstname","value": "Fname2"},{"name": "lastname","value": "Lname2"}]},
        {"values": [{"name": "firstname","value": "Fname3"},{"name": "lastname","value": "Lname3"}]}
    ]
}

期望输出

firstnamelastname
Fname1Lname1
Fname2Lname2
Fname3Lname3

你的尝试代码及结果

df = pd.DataFrame(data["results"])
df[['values'][0]].apply(lambda x: x[0]['value'])

得到的结果:

Fname1
Fname2
Fname3

解决方案

可以用pd.json_normalize结合pivot实现,无需循环或手动指定列名:

import pandas as pd

# 一步到位转换
df = pd.json_normalize(data['results'], record_path='values').pivot(columns='name', values='value').reset_index(drop=True)

步骤说明

  1. pd.json_normalize(data['results'], record_path='values'):将嵌套在results里的values数组展开,生成每行对应一个name-value对的DataFrame:
    namevalue
    firstnameFname1
    lastnameLname1
    firstnameFname2
    lastnameLname2
    firstnameFname3
    lastnameLname3
  2. pivot(columns='name', values='value'):将name列的取值转为DataFrame的列名,value列的内容填充到对应单元格。
  3. reset_index(drop=True):重置索引,去除多余的索引列。

执行后就能得到你期望的DataFrame结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:42:51