如何高效从含嵌套结构的字典创建Pandas DataFrame?
刚好处理过类似的场景,给你几个简洁高效的解决方案,完全不用逐个手动处理每个字典条目,适配不同的需求场景:
方案1:保留嵌套结构(避免自动广播)
如果你希望把列表、元组、字典这类嵌套结构完整保留为DataFrame的单个单元格,最简便的方式是先把字典转成pd.Series,再转成DataFrame——这样Pandas会自动把每个嵌套值当成单个元素,不会触发广播拆分:
import pandas as pd # 示例输入字典 my_dict = { "user_ids": [101, 102, 103], "tags": ("python", "pandas", "data-processing"), "profile": {"name": "Alice", "age": 30} } # 一行代码完成转换,保留所有嵌套结构 df = pd.Series(my_dict).to_frame(name="raw_values") print(df)
输出结果会是一个2列的DataFrame,raw_values列的每个单元格就是原始的列表、元组或字典,完全没有被拆分。
方案2:扁平化嵌套结构(自动展开)
如果需要把嵌套的内容拆解开(比如把嵌套字典展开为多列,把列表拆成多行),可以用pd.json_normalize结合explode来实现,全程自动处理:
情况A:展开嵌套字典为多列
# 把原始字典包装成单元素列表,适配json_normalize的输入格式 data = [my_dict] # 自动展开嵌套字典,列表/元组会保留为单元格 df_flat_dict = pd.json_normalize(data) print(df_flat_dict)
这里profile字段会被拆成profile.name和profile.age两列,而列表、元组仍保持为单个单元格。
情况B:把列表/元组拆成单独行
如果要把列表/元组的每个元素拆成独立行,可以在基础转换后加上explode:
# 先转成Series保留结构,再拆分列表/元组 df_flat_list = pd.Series(my_dict).to_frame(name="values").explode("values", ignore_index=True) print(df_flat_list)
这样每个列表/元组里的元素都会成为单独的一行,字典则完整保留。
方案3:字符串化嵌套结构
如果只是需要把嵌套结构转成字符串(比如用于展示、存储或避免后续处理的麻烦),直接用apply(str)即可,一行代码搞定:
df_str = pd.Series(my_dict).apply(str).to_frame(name="stringified_values") print(df_str)
所有列表、元组、字典都会被转成对应的字符串形式,比如[101, 102, 103]、('python', 'pandas', 'data-processing')。
内容的提问来源于stack exchange,提问作者Zhang18
相关产品推荐
相关产品推荐

