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

如何将Pandas DataFrame中的嵌套字典转换为列形式?

处理Pandas中嵌套字典列表的内置方法

嘿,这个问题我之前碰到过好多次!不用慌,Pandas确实有高效的内置方法来处理这种嵌套结构,完全不用手动写循环逐行解析,既简洁又高效。

先模拟你的数据

首先咱们先把你描述的结构还原成可测试的示例DataFrame,方便你对应自己的场景:

import pandas as pd

# 模拟你的原始数据结构
data = {
    'ID': [0, 1, 2],
    'Sec Type': [20, 30, 40],
    'nested_col': [
        [{'id': '3233790e-1f47-403a-bb97-58a14a2f92ab', 'values': [{'number':50, 'level':1}]}],
        [{'id': 'bbc9852c-ac76-4ecd-9afb-dd371f3bd48b', 'values': [{'number':40, 'level':2}]}],
        [{'id': 'be5629e0-458d-4aaa-b2f8-77d8ad1b0f7f', 'values': [{'number':30, 'level':3}]}]
    ]
}
df = pd.DataFrame(data)

分步解析嵌套结构

咱们分三步就能把嵌套的结构完全展开成常规列:

  1. 展开外层列表
    你的nested_col列里每个元素是长度为1的列表,先用explode把列表展开,让每个字典单独占一行:
df_exploded = df.explode('nested_col', ignore_index=True)
  1. 用json_normalize解析嵌套字典
    接下来用pd.json_normalize深入解析字典里的嵌套列表,通过record_path指定要展开的内层列表(这里是values),meta参数保留外层的id字段:
# 解析嵌套的values列表,同时保留上层的id
normalized_nested = pd.json_normalize(df_exploded['nested_col'], record_path='values', meta='id')
  1. 合并回原数据
    最后把原始的非嵌套列和解析后的结果合并,就得到完全扁平化的DataFrame了:
final_df = pd.concat([df_exploded.drop('nested_col', axis=1), normalized_nested], axis=1)

最终效果

运行完上面的代码,final_df的结构就是你想要的常规列形式:

IDSec Typeidnumberlevel
0203233790e-1f47-403a-bb97-58a14a2f92ab501
130bbc9852c-ac76-4ecd-9afb-dd371f3bd48b402
240be5629e0-458d-4aaa-b2f8-77d8ad1b0f7f303

额外说明

如果你的values列表里有多个元素(比如某一行的values是[{'number':50, 'level':1}, {'number':60, 'level':2}]),这套方法同样适用——json_normalize会自动把每个values元素展开成单独的行,完全不用修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:00