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

如何将Pandas DataFrame转换为指定格式的嵌套字典?

将Pandas DataFrame转换为目标嵌套字典的正确方法

首先,先确认你的示例DataFrame可以通过这段代码复现:

import pandas as pd

# 生成示例DataFrame
df = pd.DataFrame({
    'ScID.xml': {
        0: '0006-****(****)050[****:ayfb]2.3.co.xml',
        1: '0006-****(****)050[****:smihds]2.3.co.xml',
        2: '0006-****(****)050[****:gissad]2.3.co.xml'
    },
    'topic1': {0: 7.26744186046513e-06, 1: 0.0006479109, 2: 3.413e-06},
    'topic2': {0: 7.26744186046513e-06, 1: 0.0091339857, 2: 3.413e-06},
    'topic3': {0: 7.26744186046513e-06, 1: 2.79485746226941e-06, 2: 3.413e-06}
})

你想要的目标嵌套字典格式是这样的:

new_dict = {
    '0006-****(****)050[****:ayfb]2.3.co.xml': {
        'topic1': 0.000007, 
        'topic2': 0.000007, 
        'topic3': 0.000007
    },
    '0006-****(****)050[****:smihds]2.3.co.xml': {
        'topic1': 0.000648, 
        'topic2': 0.009134, 
        'topic3': 0.000003
    },
    '0006-****(****)050[****:gissad]2.3.co.xml': {
        'topic1': 0.000003, 
        'topic2': 0.000003, 
        'topic3': 0.000003
    }
}

你之前尝试的df.set_index('ScID.xml').T.to_dict()之所以没得到正确结果,是因为T转置后再用默认的to_dict()生成的结构不符合需求——它会把转置后的索引作为外层键,而不是你想要的ScID.xml值。

正确的实现方法

其实只需要去掉转置操作,直接使用to_dict('index')参数即可:

new_dict = df.set_index('ScID.xml').to_dict('index')

方法解释:

  • df.set_index('ScID.xml'):将ScID.xml列设置为DataFrame的索引,让每一行的索引值成为外层字典的键。
  • .to_dict('index'):这个参数指定转换规则,以DataFrame的索引作为外层字典的键,每一行的列名与对应值组成内层字典,完美匹配你需要的嵌套结构。

如果需要像示例里那样保留6位小数的格式,可以先对数值列做格式化处理:

# 对所有topic列保留6位小数
df[['topic1', 'topic2', 'topic3']] = df[['topic1', 'topic2', 'topic3']].round(6)
# 再转换为目标字典
new_dict = df.set_index('ScID.xml').to_dict('index')

这样就能得到和你期望完全一致的嵌套字典啦!


内容的提问来源于stack exchange,提问作者Lorcán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:04:09