如何将深度不均的嵌套字典转换为指定格式的pandas DataFrame
首先导入pandas库:
import pandas as pd
你的原始嵌套字典:
data = {'x': 1, 'y': 2, 'z':{'a': 3, 'b': 4}, 'w': {'a': 5, 'b': 6}}
最优实现方案
最优方式优先用pandas内置的pd.json_normalize方法,这是官方专门为扁平化嵌套JSON/字典结构设计的API,内部做了性能优化,比手动遍历效率高,适配性也更强。
场景1:需要单层列名的宽表
直接调用即可:
df = pd.json_normalize(data)
输出结果如下,嵌套的键会默认用.拼接列名:
| x | y | z.a | z.b | w.a | w.b |
|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 |
如果要自定义分隔符,比如用下划线,加sep参数即可:
df = pd.json_normalize(data, sep='_')
场景2:需要最外层键为行索引、二级键为列的表结构
如果你的目标结构是把x、y、z、w作为行索引,a、b为列,x和y的单值单独存储,只需加简单的预处理:
processed = [] for k, v in data.items(): row = v if isinstance(v, dict) else {'single_val': v} row['outer_key'] = k processed.append(row) df = pd.DataFrame(processed).set_index('outer_key')
输出结果:
| outer_key | single_val | a | b |
|---|---|---|---|
| x | 1 | NaN | NaN |
| y | 2 | NaN | NaN |
| z | NaN | 3 | 4 |
| w | NaN | 5 | 6 |
这个方案代码简洁易读,性能足够应对绝大多数日常场景。
内容的提问来源于stack exchange,提问作者rivu
相关产品推荐
相关产品推荐

