Python3下将Pandas DataFrame转为ID为键的嵌套字典的最优方法
最优方案:用Pandas内置的
to_dict('index')高效转换 完全可以用Pandas的to_dict方法实现,而且这是处理大数据量时最快、最省资源的方式——它是底层优化过的矢量化操作,比手动Python循环高效得多。
核心实现步骤
- 按需调整
ID列的类型(比如示例里外层键是字符串,原数据是整数的话先转换) - 将
ID设为DataFrame的索引 - 调用
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
相关产品推荐
相关产品推荐

