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

如何将多层嵌套字典转换为Pandas DataFrame?

多层嵌套字典转Pandas DataFrame的正确方法

问题背景

尝试将多层嵌套字典转成Pandas DataFrame时,先后遇到两个问题:

  1. 使用pd.DataFrame.from_dict(nested_dict, orient="index")后,一级键(邮编)成为行索引,且列中仍保留子字典结构;
  2. 使用pd.json_normalize(nested_dict, max_level=1)后,得到仅1行、289114列的异常结果。

原字典结构示例:

{
    '00501': {
        'Saturday': {'data1': 'DATA1-1', 'data2': ''},
        'Sunday': {'data1': '', 'data2': ''},
        # 其他星期数据
    },
    '00544': {
        'Saturday': {'data1': 'DATA1-1', 'data2': ''},
        'Sunday': {'data1': '', 'data2': ''},
        # 其他星期数据
    },
    # 更多邮编数据
}

解决方案

方法一:遍历构造数据后展开嵌套

通过遍历字典提取邮编,将其与对应星期数据合并,再逐个展开子字典列:

import pandas as pd

# 构造包含邮编的基础数据列表
data_list = []
for zip_code, weekly_data in nested_dict.items():
    daily_data = {'zip_code': zip_code, **weekly_data}
    data_list.append(daily_data)

# 转成初始DataFrame
df = pd.DataFrame(data_list)

# 展开每个星期几的子字典列
week_cols = ['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
for col in week_cols:
    # 展开子字典
    normalized_col = pd.json_normalize(df[col])
    # 为展开的列添加前缀,避免列名重复
    normalized_col.columns = [f"{col}_{name}" for name in normalized_col.columns]
    # 合并回原DataFrame并删除原嵌套列
    df = pd.concat([df.drop(col, axis=1), normalized_col], axis=1)

方法二:调整结构后直接用json_normalize

重新构造输入数据结构,让每个条目包含邮编和完整星期数据,再一次性展开所有嵌套:

import pandas as pd

# 重构数据结构,将邮编作为每个条目的键值对
structured_data = [
    {'zip_code': zip_code, **weekly_data}
    for zip_code, weekly_data in nested_dict.items()
]

# 一次性展开所有嵌套层级
df = pd.json_normalize(structured_data)

最终效果

两种方法都会生成包含zip_code列,以及Saturday_data1、Saturday_data2、Sunday_data1等展开列的DataFrame,所有嵌套数据都被平铺为普通列,每个行对应一个邮编的完整数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:36:22