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

如何在Python中将嵌套字典转换为指定格式的DataFrame

解决方案

步骤说明与代码实现

我们可以通过Pandas的多层索引、数据展开和列重命名来实现需求,具体代码如下:

import pandas as pd

# 假设你的原始嵌套字典名为 student_data
student_data = {
    'Student_ID_1': {'Course_1': [12,45,378], 'Course_2': [33,78,345]},
    'Student_ID_2': {'Course_6': [15,25,48], 'Course_24': [31,38,342]}
}

# 1. 将嵌套字典转为多层索引Series,每层索引对应学生ID和课程ID
s = pd.Series(student_data).stack()

# 2. 把每个课程对应的列表拆分为3列(对应a/b/c三个值)
df = s.apply(pd.Series)

# 3. 给拆分后的列加上后缀,并和课程ID组合成最终列名
df.columns = ['_a', '_b', '_c']
df = df.unstack(level='Course_ID')
df.columns = [f'{course_col}{suffix}' for suffix, course_col in df.columns]

# 4. 把学生ID从索引转为列,并重置索引
df = df.reset_index().rename(columns={'index': 'Student_ID'})

# 5. 补全所有50门课程的a/b/c列,缺失值填充NaN(可改为fillna(0)填充0)
all_required_cols = []
for course_num in range(1, 51):
    all_required_cols += [f'Course_{course_num}_a', f'Course_{course_num}_b', f'Course_{course_num}_c']

df = df.reindex(columns=['Student_ID'] + all_required_cols)

# 可选:如果需要把Student_ID转为纯数字(比如从'Student_ID_12855'提取12855)
df['Student_ID'] = df['Student_ID'].str.extract(r'(\d+)').astype(int)

print(df.head())

关键步骤解释

  • 多层索引展开:stack() 把每个学生的课程从字典键转为二级索引,让每个(学生ID,课程ID)对对应一个数值列表。
  • 列表拆分:apply(pd.Series) 自动把列表的三个元素拆分为三列,解决了你之前只能取第一个值的问题。
  • 列名重构:通过unstack和字符串拼接,把课程ID和a/b/c后缀组合成需求中的列名格式。
  • 补全列:reindex确保所有50门课程的三个列都存在,避免部分学生未修课程导致列缺失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:54:26