如何将嵌套字典转换为指定格式的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
相关产品推荐
相关产品推荐

