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

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

解决N层嵌套字典转指定结构Pandas DataFrame的问题

核心思路

先通过递归遍历把嵌套字典展平成「路径-值」的列表,再将路径拆分为level_0和level_1列,最后转换为目标DataFrame。

具体实现代码

1. 导入依赖库

import pandas as pd
import numpy as np

2. 递归展平嵌套字典

写一个递归函数,遍历所有层级的键值对,将嵌套路径用分隔符(比如.)拼接,生成扁平化的路径-值列表:

def flatten_nested_dict(d, parent_path="", sep="."):
    items = []
    for key, value in d.items():
        # 拼接当前层级的路径
        current_path = f"{parent_path}{sep}{key}" if parent_path else key
        # 如果当前值还是字典,继续递归遍历
        if isinstance(value, dict):
            items.extend(flatten_nested_dict(value, current_path, sep=sep))
        # 如果是叶子节点(非字典值),添加到结果列表
        else:
            items.append((current_path, value))
    return items

3. 转换为目标DataFrame

以示例嵌套字典为例,执行以下步骤:

# 示例输入的嵌套字典
input_dict = {
    "X": 10,
    "Y": {"Y1": 20, "Y2": {"Y2a": 30, "Y2b": 40}},
    "Z": {"Z1": {"Z1a": {"Z1a1": 50}}}
}

# 展平字典
flattened_list = flatten_nested_dict(input_dict)

# 转为临时DataFrame,包含路径和值两列
temp_df = pd.DataFrame(flattened_list, columns=["path", "value"])

# 拆分路径为level_0(顶层键)和level_1(剩余路径部分)
temp_df[["level_0", "level_1"]] = temp_df["path"].str.split(".", n=1, expand=True)

# 调整列顺序,替换空值为NaN,删除临时path列
result_df = temp_df[["level_0", "level_1", "value"]]
result_df["level_1"] = result_df["level_1"].replace("", np.nan)

# 查看结果
print(result_df)

输出结果

level_0       level_1  value
0       X           NaN     10
1       Y            Y1     20
2       Y        Y2.Y2a     30
3       Y        Y2.Y2b     40
4       Z  Z1.Z1a.Z1a1     50

自定义调整说明

如果需要调整level_1的格式(比如只保留最后一级父键,而非完整路径),可以修改路径拆分逻辑:

def split_path_custom(path):
    parts = path.split(".")
    if len(parts) == 1:
        return parts[0], np.nan
    # 取顶层键作为level_0,中间所有层级拼接为level_1
    return parts[0], ".".join(parts[1:-1]) if len(parts) > 2 else parts[1]

# 应用自定义拆分函数
temp_df[["level_0", "level_1"]] = temp_df["path"].apply(lambda x: pd.Series(split_path_custom(x)))

修改后的输出会变为:

level_0 level_1  value
0       X     NaN     10
1       Y      Y1     20
2       Y      Y2     30
3       Y      Y2     40
4       Z    Z1a     50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:30:51