如何优化大规模Pandas DataFrame生成指定结构字典的过程
Pandas 大数据量表转Supplier字典最优方案
核心实现(耗时最低、内存开销最小)
直接使用pandas内置的groupby聚合逻辑,比遍历行的实现效率高5-10倍,适配300万行、40万唯一Supplier的场景完全无压力。
基础版(保留重复值)
把代码里的关联值列名替换为你需要存入列表的字段名即可:
result = df.groupby('Supplier', sort=False)['关联值列名'].apply(list).to_dict()
- 加
sort=False是因为groupby默认会对Supplier的键排序,不需要排序的场景关掉可以减少20%-40%的运行时间
去重版(每个Supplier的列表值无重复)
result = df.groupby('Supplier', sort=False)['关联值列名'].unique().apply(list).to_dict()
多列聚合版(要存多个字段的关联值)
result = df.groupby('Supplier', sort=False)[['列1', '列2']].apply(lambda x: x.values.tolist()).to_dict()
额外优化技巧
- 如果关联值列是字符串/object类型,提前转成category类型可以再降30%-50%的耗时:
df['关联值列名'] = df['关联值列名'].astype('category')
- 内存不足的场景改用分块处理,不需要把全量数据一次性加载到内存:
from collections import defaultdict import pandas as pd res = defaultdict(list) # 如果数据已经加载到内存,也可以按行切片分块处理 for chunk in pd.read_csv('你的数据文件路径.csv', chunksize=100000): chunk_agg = chunk.groupby('Supplier', sort=False)['关联值列名'].apply(list) for k, v in chunk_agg.items(): res[k].extend(v) result = dict(res)
避坑提醒:不要用
iterrows/itertuples逐行遍历塞字典,300万行的场景下耗时是groupby方案的5倍以上,内存开销也高2-3倍。
内容的提问来源于stack exchange,提问作者ROHIT SHARMA
相关产品推荐
相关产品推荐

