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

Python pandas提取嵌套列表时如何将id字段添加到DataFrame每行

问题说明

开发Python应用时从数据库检索得到名为tbl的列表,为嵌套字典结构,样例格式如下:

[
   {
      "id": "rec2fiwnTQewTv9HC",
      "createdTime": "2022-06-27T08:25:47.000Z",
      "fields": {
         "Num": 19,
         "latitude": 31.101405,
         "longitude": 36.391831,
         "State": 2,
         "Label": "xyz",
         "Red": 0,
         "Green": 255,
         "Blue": 0
      }
   },
   {
      "id": "rec4y7vhgZVDHrhrQ",
      "createdTime": "2022-06-27T08:25:47.000Z",
      "fields": {
         "Num": 30,
         "latitude": 31.101405,
         "longitude": 36.391831,
         "State": 2,
         "Label": "abc",
         "Red": 0,
         "Green": 255,
         "Blue": 0
      }
   }
]

原有实现仅能提取嵌套结构fields中的值生成DataFrame,代码如下:

pd.DataFrame([d['fields'] for d in tbl])

需求是将每条记录顶层的id字段同步添加到生成的DataFrame对应行中。

实现方案

方案1:遍历合并字典(轻量场景推荐)

在列表推导式生成行数据时,手动将顶层id和fields下的字段合并为同一个字典即可,利用Python字典解包语法写法非常简洁:

import pandas as pd

df = pd.DataFrame([
    {"id": d["id"], **d["fields"]}
    for d in tbl
])

如果后续需要同时保留顶层的createdTime等其他字段,直接在字典中追加键值对即可,例如:

df = pd.DataFrame([
    {
        "id": d["id"],
        "createdTime": d["createdTime"],
        **d["fields"]
    }
    for d in tbl
])

方案2:用pandas内置方法拍平嵌套结构(复杂嵌套场景推荐)

如果数据嵌套层级多、字段量大,不需要手动拼接字典,直接用pd.json_normalize自动拍平嵌套结构即可:

# 自动把所有层级的字段展开为列
df = pd.json_normalize(tbl)

该方法生成的列名会自动带层级前缀,例如fields.Num、fields.latitude,如果不需要前缀,可以通过列重命名清理:

df.columns = [col.replace("fields.", "") for col in df.columns]
# 不需要createdTime字段的话直接删除即可
df = df.drop(columns=["createdTime"])

两种方案最终生成的DataFrame都会在每行保留对应记录的顶层id,同时包含fields下的所有业务字段,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:24:22