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

Python3下将Pandas DataFrame转为ID为键的嵌套字典的最优方法

最优方案:用Pandas内置的to_dict('index')高效转换

完全可以用Pandas的to_dict方法实现,而且这是处理大数据量时最快、最省资源的方式——它是底层优化过的矢量化操作,比手动Python循环高效得多。

核心实现步骤

  1. 按需调整ID列的类型(比如示例里外层键是字符串,原数据是整数的话先转换)
  2. 将ID设为DataFrame的索引
  3. 调用to_dict('index')直接生成目标嵌套字典结构

完整代码示例

import pandas as pd

# 构造你的DataFrame
df = pd.DataFrame({
    'ID': [123, 456, 789],
    'year': [2019, 2019, 2018],
    'country': ['USA', 'UK', 'Sweden']
})

# 把ID转为字符串(匹配示例里的外层键格式)
df['ID'] = df['ID'].astype(str)

# 关键转换代码
result = df.set_index('ID').to_dict('index')

print(result)
# 输出:
# {'123': {'year': 2019, 'country': 'USA'}, '456': {'year': 2019, 'country': 'UK'}, '789': {'year': 2018, 'country': 'Sweden'}}

为什么这是最优解?

  • 性能拉满:to_dict('index')是Pandas底层用C实现的操作,跳过了Python层面的逐行循环(比如iterrows/apply这类方法)。处理百万级行数据时,速度会比手动循环快几十甚至上百倍,内存占用也更低。
  • 代码简洁:一行核心代码完成转换,可读性和维护性都很强。

对比低效的手动循环方式(不推荐大数据量使用)

如果你用Python循环逐行构建字典,比如下面这种写法,在数据量较大时会非常慢:

# 低效写法,仅作对比
result = {}
for _, row in df.iterrows():
    result[str(row['ID'])] = {'year': row['year'], 'country': row['country']}

这种方法在小数据集上可以运行,但数据量上去后,Python的循环开销会成为瓶颈,远不如内置的to_dict高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:28:10