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

如何将键对应列表值的Python字典转为键为索引的pandas DataFrame

多列表值字典转指定结构Pandas DataFrame实现

需求说明

  • 字典键作为DataFrame的行索引
  • 每个输入字典单独对应DataFrame的一列
  • 字典中键对应的列表值需要逐元素展开为单独行,不能将整个列表作为单元格内容
  • 自动兼容部分字典缺失键的场景,缺失位置正常填充NaN

原有问题代码

import pandas as pd

dict1 = {'key_1': [1, 2, 3, 4], 'key_2': [5, 6, 7, 8], 'key_3': [9, 10, 11, 12]}
dict2 = {'key_1': ['a', 'b', 'c', 'd'], 'key_2': ['e', 'f', 'g', 'h'], 'key_3': ['i', 'j', 'k', 'l']}
dict3 = {'key_1': ['DD', 'CC', 'BB', 'AA'], 'key_3': ['II', 'JJ', 'KK', 'LL']}

df = pd.DataFrame.from_dict({'dict1':pd.Series(dict1),
                            'dict2':pd.Series(dict2),
                            'dict3':pd.Series(dict3)})

print(df)

以上代码运行后,单元格存储的是完整列表,未做逐元素展开,不符合预期。

正确实现代码

直接对初始生成的DataFrame做多列explode即可,无需递归操作,自动兼容缺失键的NaN填充:

import pandas as pd

dict1 = {'key_1': [1, 2, 3, 4], 'key_2': [5, 6, 7, 8], 'key_3': [9, 10, 11, 12]}
dict2 = {'key_1': ['a', 'b', 'c', 'd'], 'key_2': ['e', 'f', 'g', 'h'], 'key_3': ['i', 'j', 'k', 'l']}
dict3 = {'key_1': ['DD', 'CC', 'BB', 'AA'], 'key_3': ['II', 'JJ', 'KK', 'LL']}

df = pd.DataFrame.from_dict({
    'dict1': pd.Series(dict1),
    'dict2': pd.Series(dict2),
    'dict3': pd.Series(dict3)
# 同时对三列做列表展开,保留原有字典键作为索引
}).explode(column=['dict1', 'dict2', 'dict3'], ignore_index=False)

# 如果需要把作为索引的字典键转为普通列,放开下面这行注释即可
# df = df.reset_index(names='dict_key')

print(df)

版本兼容说明

  • pandas 1.3.0及以上版本支持explode传入列名列表同时展开多列
  • 低版本pandas可以用逐列展开的写法替代:
df = pd.DataFrame.from_dict({
    'dict1': pd.Series(dict1),
    'dict2': pd.Series(dict2),
    'dict3': pd.Series(dict3)
}).apply(lambda col: col.explode())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:15:17