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
相关产品推荐
相关产品推荐

