将Pandas DataFrame转换为嵌套字典的高效实现方法
Pandas DataFrame转嵌套字典的高效实现方法
问题描述
我有如下格式的Pandas DataFrame:
Path | Val A/B 1 A/C 3 A/D/E 5 A/E 7 F/G 9 ... ...
希望将其转换为嵌套字典,层级由Path字段中/分隔的内容决定,预期输出如下:
d = {'A': {'B': 1, 'C': 3, 'D': {'E': 5}, 'E': 7}, 'F': {'G': 9} }
请问有什么高效的实现方式?
高效实现方法
可以通过迭代DataFrame的每一行,逐步构建嵌套字典来实现,这种方法时间复杂度为O(n)(n为DataFrame行数),效率很高,代码逻辑也清晰:
代码实现
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'Path': ['A/B', 'A/C', 'A/D/E', 'A/E', 'F/G'], 'Val': [1, 3, 5, 7, 9] }) def df_to_nested_dict(df): result = {} for path, val in zip(df['Path'], df['Val']): parts = path.strip().split('/') # 去除路径前后空格,拆分层级 current = result # 遍历除最后一个层级外的所有部分 for part in parts[:-1]: # 如果当前层级不存在,创建空字典 if part not in current: current[part] = {} current = current[part] # 最后一个层级赋值 current[parts[-1]] = val return result # 生成嵌套字典 nested_dict = df_to_nested_dict(df) print(nested_dict)
代码说明
- 初始化空字典
result作为最终结果容器 - 遍历DataFrame的每一行,将路径去除前后空格后拆分为层级列表(比如
A/D/E拆分为['A','D','E']) - 从根字典开始,逐层检查并创建子字典,直到到达倒数第二个层级
- 将最后一个层级的键对应的值设置为
Val列的数值
这种方法无需额外依赖,纯Python+Pandas实现,处理大量数据时也能保持高效——每一行仅遍历一次路径层级,没有冗余操作。如果需要处理重复路径、空路径等特殊场景,可在代码中添加对应判断逻辑,针对当前需求,上述代码已足够简洁高效。
内容的提问来源于stack exchange,提问作者Kspr
相关产品推荐
相关产品推荐

