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

Python如何将指定格式的学生信息字典转换为DataFrame

问题场景

现有其他程序输出的固定格式学生信息字典,无法修改原始字典结构,字典内容如下:

student_info_dict = {
    "Student_1_Name": "Alice",
    "Student_1_Age": 23,
    "Student_1_Phone_Number": 1111,
    "Student_1_before_after": (120, 109),
    "Student_2_Name": "Bob",
    "Student_2_Age": 56,
    "Student_2_Phone_Number": 1234,
    "Student_2_before_after": (115, 107),
    "Student_3_Name": "Casie",
    "Student_3_Age": 47,
    "Student_3_Phone_Number": 4567,
    "Student_3_before_after": (180, 140),
    "Student_4_Name": "Donna",
    "Student_4_Age": 33,
    "Student_4_Phone_Number": 6789,
    "Student_4_before_after": (150, 138),
}

需要将上述字典转换为如下结构的pandas DataFrame:

Name   Age  Phone_Number Before_and_After
0  Alice  23   1111        (120,109)
1  Bob    56   1234        (115,107)
2  Casie  47   4567        (180,140)
3  Donna  33   6789        (150,138)
实现方案

核心逻辑是按键名里的学生编号拆分聚合属性,不需要提前知道学生总数,适配固定Student_编号_属性名的键名规则:

  • 遍历原始字典的所有键值对,拆分键名拿到学生编号和对应属性
  • 按学生编号分组存储属性值,同时把before_after属性重命名为目标列名Before_and_After
  • 把分组完成的学生记录列表直接传入pandas生成DataFrame即可

完整可运行代码:

import pandas as pd

student_info_dict = {
    "Student_1_Name": "Alice",
    "Student_1_Age": 23,
    "Student_1_Phone_Number": 1111,
    "Student_1_before_after": (120, 109),
    "Student_2_Name": "Bob",
    "Student_2_Age": 56,
    "Student_2_Phone_Number": 1234,
    "Student_2_before_after": (115, 107),
    "Student_3_Name": "Casie",
    "Student_3_Age": 47,
    "Student_3_Phone_Number": 4567,
    "Student_3_before_after": (180, 140),
    "Student_4_Name": "Donna",
    "Student_4_Age": 33,
    "Student_4_Phone_Number": 6789,
    "Student_4_before_after": (150, 138),
}

# 按学生ID重组记录
stu_map = {}
for k, v in student_info_dict.items():
    _, stu_id, attr_name = k.split("_", 2)
    if stu_id not in stu_map:
        stu_map[stu_id] = {}
    # 匹配目标列名
    if attr_name == "before_after":
        attr_name = "Before_and_After"
    stu_map[stu_id][attr_name] = v

# 生成DataFrame并重置索引
df = pd.DataFrame(stu_map.values()).reset_index(drop=True)

该方法不依赖字典键的排列顺序,只要键名保持Student_数字_属性名的固定格式,哪怕后续增加更多学生、扩展更多属性字段,都能正常解析,不需要修改代码逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:18:09