如何将defaultdict(list)列表高效转换为pandas DataFrame
高效转换defaultdict为pandas DataFrame方案
性能瓶颈说明
- 原有代码在循环中逐次创建小型DataFrame,对象实例化开销随数据集规模增长快速上升
- 多次调用
pd.concat拼接大量小DataFrame,内存拷贝、索引对齐的开销会呈非线性增长,是性能差的核心原因
优化实现
无重复列名场景
如果所有data['2subset']下的defaultdict键名无重复,直接合并为总字典后一次性转换即可:
merged_dict = {} for sub_dict in data["2subset"]: merged_dict.update(sub_dict) result = pd.DataFrame(merged_dict)
存在重复列名场景
如果有重复键名,可添加自动重命名逻辑避免列覆盖,效果和原有concat逻辑对齐:
merged_dict = {} key_counter = {} for sub_dict in data["2subset"]: for key, val in sub_dict.items(): # 重复列名添加序号后缀,如需和原concat后缀格式对齐可改为f"{key}.{key_counter[key]}" if key in key_counter: key_counter[key] += 1 processed_key = f"{key}_{key_counter[key]}" else: key_counter[key] = 0 processed_key = key merged_dict[processed_key] = val result = pd.DataFrame(merged_dict)
性能收益
该方案仅需遍历一次数据集、仅创建一次DataFrame,处理万级以上的defaultdict时,性能可提升百倍以上。
内容的提问来源于stack exchange,提问作者to3
相关产品推荐
相关产品推荐

