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

如何将Python嵌套字典转换为Pandas非平衡面板数据

嵌套字典转非平衡面板数据解决方案

示例输入结构

假设你的嵌套字典结构如下(模拟个人就业历史数据):

employment_data = [
    {
        "person_id": 101,
        "name": "张三",
        "jobs": [
            {"year": 2020, "city": "北京", "company": "A公司"},
            {"year": 2021, "city": "上海", "company": "B公司"},
            {"year": 2023, "city": "广州", "company": "C公司"}
        ]
    },
    {
        "person_id": 102,
        "name": "李四",
        "jobs": [
            {"year": 2019, "city": "深圳", "company": "D公司"},
            {"year": 2022, "city": "杭州", "company": "E公司"}
        ]
    }
]

目标非平衡面板数据样式

最终要生成的面板数据如下(每人对应多行就业记录):

person_idnameyearcitycompany
101张三2020北京A公司
101张三2021上海B公司
101张三2023广州C公司
102李四2019深圳D公司
102李四2022杭州E公司

解决方案

方法一:手动遍历构建(逻辑清晰,适合新手)

直接遍历嵌套结构,把每条就业记录拆成单独行,再转成DataFrame:

import pandas as pd

panel_rows = []
for person in employment_data:
    # 提取个人基础信息
    base_info = {"person_id": person["person_id"], "name": person["name"]}
    # 遍历每份工作经历,拼接基础信息与就业详情
    for job in person["jobs"]:
        panel_rows.append({**base_info, **job})

panel_df = pd.DataFrame(panel_rows)

方法二:Pandas组合工具(高效处理复杂嵌套)

结合explode拆分列表,再用json_normalize展开嵌套字典,适合大规模数据:

import pandas as pd

# 外层数据转DataFrame
df = pd.DataFrame(employment_data)
# 把jobs列表拆分成多行
df_exploded = df.explode("jobs", ignore_index=True)
# 展开jobs列中的嵌套字典,与原数据合并
panel_df = pd.concat(
    [df_exploded.drop("jobs", axis=1), pd.json_normalize(df_exploded["jobs"])],
    axis=1
)

关键说明

之前单独用json_normalize失败,是因为它默认只处理第一层嵌套,而jobs是列表结构,必须先用explode把列表拆成每行,再展开里面的字典字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:04:56