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

如何将含列表值的嵌套字典转换为Pandas DataFrame

将嵌套字典转为保留列表完整值的Pandas DataFrame

问题背景

你有如下嵌套字典:

my_dict={'1':{'name':'one',
              'f_10':[1,10,20,30],
              'f_20':[1,20,40,60]},
        '2':{'name':'two',
              'f_10':[2,12,22,32],
              'f_20':[2,22,42,62]}}

需要转换为保留列表完整值的DataFrame,避免使用concat时列表被拆分为多行的问题。

解决方案

方法1:使用from_dict指定orient='index'

这是最直接的方式,orient='index'会将外层字典的键作为行索引,子字典的键作为列名,完整保留列表类型的单元格值:

import pandas as pd

my_dict = {'1':{'name':'one',
                'f_10':[1,10,20,30],
                'f_20':[1,20,40,60]},
           '2':{'name':'two',
                'f_10':[2,12,22,32],
                'f_20':[2,22,42,62]}}

# 转换为DataFrame,外层字典键作为行索引
df = pd.DataFrame.from_dict(my_dict, orient='index')
# 将行索引转为单独列,并重命名(可根据需求调整列名)
df = df.reset_index().rename(columns={'index': 'id'})

print(df)

输出结果:

id  name          f_10          f_20
0  1   one  [1, 10, 20, 30]  [1, 20, 40, 60]
1  2   two  [2, 12, 22, 32]  [2, 22, 42, 62]

如果需要第一列列名为name(如你示例所示),可修改rename部分为rename(columns={'index': 'name'}),但注意会产生两个同名name列,建议使用不同名称避免混淆。

方法2:手动构造数据列表

如果需要更灵活的行构造逻辑,可以遍历字典手动组装每行数据:

import pandas as pd

my_dict = {'1':{'name':'one',
                'f_10':[1,10,20,30],
                'f_20':[1,20,40,60]},
           '2':{'name':'two',
                'f_10':[2,12,22,32],
                'f_20':[2,22,42,62]}}

data_rows = []
for key, sub_dict in my_dict.items():
    # 组合外层键和子字典内容为一行数据
    row = {'id': key}
    row.update(sub_dict)
    data_rows.append(row)

df = pd.DataFrame(data_rows)

为什么concat会拆分列表?

当你用concat拼接由子字典单独转换的DataFrame时,pandas会自动将列表类型的元素拆分成多行——因为它默认将列表视为可迭代序列。而上面两种方法都是直接将列表作为单一单元格值传入DataFrame,因此不会触发拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:05:22