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

如何用更简洁方式将Pandas DataFrame转换为嵌套字典(非列表推导式)

Pandas DataFrame转换为指定嵌套字典的简洁实现

原始DataFrame定义

import pandas as pd

df = pd.DataFrame.from_records(
    [(1,2,3,4,5,6,7),
     (8,9,10,11,12,13,14),
     (15,16,17,18,19,20,21)
    ], columns=['c1','c2','c3','c4','c5','c6','c7'])

目标嵌套字典结构

[{'one': {'f1': 1, 'f2': 2},
  'two': {'f3': 3, 'f4': 4, 'f5': 5},
  'three': {'f6': 6},
  'four': {'f7': 7}},
 {'one': {'f1': 8, 'f2': 9},
  'two': {'f3': 10, 'f4': 11, 'f5': 12},
  'three': {'f6': 13},
  'four': {'f7': 14}},
 {'one': {'f1': 15, 'f2': 16},
  'two': {'f3': 17, 'f4': 18, 'f5': 19},
  'three': {'f6': 20},
  'four': {'f7': 21}}]

现有列表推导式实现

l1 = [{'one':{'f1':e1,'f2':e2}, 'two':{'f3':e3,'f4':e4,'f5':e5}, 'three':{'f6':e6}, 'four':{'f7':e7}} 
      for e1,e2,e3,e4,e5,e6,e7 in list(df.to_records(index=False))]
print(l1)

更简洁的Pandas内置函数实现

可以利用df.apply()结合自定义逻辑实现,代码结构更直观,无需手动解构行元素:

方式1:自定义函数+apply

def row_to_nested(row):
    return {
        'one': {'f1': row['c1'], 'f2': row['c2']},
        'two': {'f3': row['c3'], 'f4': row['c4'], 'f5': row['c5']},
        'three': {'f6': row['c6']},
        'four': {'f7': row['c7']}
    }

result = df.apply(row_to_nested, axis=1).tolist()
print(result)

方式2:匿名函数简化版

result = df.apply(lambda row: {
    'one': {'f1': row['c1'], 'f2': row['c2']},
    'two': {'f3': row['c3'], 'f4': row['c4'], 'f5': row['c5']},
    'three': {'f6': row['c6']},
    'four': {'f7': row['c7']}
}, axis=1).tolist()

这种方式依托Pandas原生方法处理,可读性和维护性更强,后续调整嵌套结构时只需修改字典定义即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:01:16