如何从Pandas DataFrame构建指定结构的嵌套字典
Pandas DataFrame 生成指定层级嵌套字典实现方法
你可以直接通过逐行遍历+字典组装的方式实现,逻辑直观易维护,对绝大多数规模的数据集都有足够好的性能。
方法1:基础逐行组装(可读性最高)
直接遍历DataFrame每一行,按照你要求的层级结构拼接字典即可:
# 假设你的DataFrame变量名为df nested_dict = {} for _, row in df.iterrows(): nested_dict[row["Name"]] = { "Bio": { "Education": row["Education"], "DOB": row["DOB"], "Job": row["Job"] }, "Questions": { "Q1": row["Q1"], "Q2": row["Q2"], "Q3": row["Q3"] } }
方法2:列分组写法(适合字段多的场景)
如果Bio、Questions分组下的字段较多,不想重复写键值对,可以借助Pandas自带的to_dict()方法减少重复代码:
# 提前按分组定义列名列表,后续调整字段只需要改这两个列表即可 bio_columns = ["Education", "DOB", "Job"] question_columns = ["Q1", "Q2", "Q3"] nested_dict = { user_name: { "Bio": user_row[bio_columns].to_dict(), "Questions": user_row[question_columns].to_dict() } for user_name, user_row in df.set_index("Name").iterrows() }
注意事项
- 如果
Name列存在重复值,以上两种写法都会默认保留最后一次出现的同名用户数据,如果需要保留所有同名条目,可以将外层字典的值改为列表结构存储,或者提前对DataFrame的Name列做去重处理。 - 如果字典后续需要做JSON序列化,遇到日期、空值这类Pandas特殊类型时,可以在取值时提前做类型转换,比如用
str(row["DOB"])把日期转成字符串格式。
内容的提问来源于stack exchange,提问作者Abdul Aleem Asim
相关产品推荐
相关产品推荐

