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

如何高效从含嵌套结构的字典创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:21:36