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

如何将嵌套字典转换为指定格式的Pandas DataFrame?

将嵌套字典转换为指定格式的Pandas DataFrame

你的需求是把嵌套字典转换成长格式的DataFrame,而你之前用pd.DataFrame.from_dict()得到的是宽格式,所以不符合预期。下面提供两种简单的解决方法:

方法一:列表推导式预处理数据

先把嵌套字典拆解成(job, person, age)的元组列表,再直接生成DataFrame:

import pandas as pd

sample_dict = {'doctor': {'doctor_a': 26, 'doctor_b': 40, 'doctor_c': 42}, 
               'teacher': {'teacher_x': 21, 'teacher_y': 45, 'teacher_z': 33}}

# 拆解嵌套字典(两种写法任选其一)
# 写法1:普通循环
data = []
for job, people in sample_dict.items():
    for person, age in people.items():
        data.append((job, person, age))

# 写法2:简洁的列表推导式
# data = [(job, person, age) for job, people in sample_dict.items() for person, age in people.items()]

# 生成目标格式的DataFrame
df = pd.DataFrame(data, columns=['job', 'person', 'age'])
print(df)

输出结果:

job     person  age
0   doctor   doctor_a   26
1   doctor   doctor_b   40
2   doctor   doctor_c   42
3  teacher  teacher_x   21
4  teacher  teacher_y   45
5  teacher  teacher_z   33

方法二:利用Pandas的stack()方法转换格式

先通过from_dict生成宽格式DataFrame,再用stack()把列转成行,最后调整列名和顺序:

import pandas as pd

sample_dict = {'doctor': {'doctor_a': 26, 'doctor_b': 40, 'doctor_c': 42}, 
               'teacher': {'teacher_x': 21, 'teacher_y': 45, 'teacher_z': 33}}

# 生成宽格式DataFrame
wide_df = pd.DataFrame.from_dict(sample_dict)
# 堆叠列到行并重置索引
long_df = wide_df.stack().reset_index()
# 重命名列名
long_df.columns = ['person', 'job', 'age']
# 调整列顺序为需求格式
final_df = long_df[['job', 'person', 'age']]
print(final_df)

输出结果和方法一完全一致。

为什么原来的方法不符合预期?

pd.DataFrame.from_dict(sample_dict)默认会把外层字典的键(doctor、teacher)作为DataFrame的列,内层字典的键(doctor_a、teacher_x等)作为行索引,所以得到的是宽格式,每个单元格只对应一个职业的年龄,其他职业显示缺失值(你示例里的Nah实际是NaN)。而我们需要的是把每个职业-人物-年龄的组合作为单独一行,所以需要转换成长格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:44