如何最高效将嵌套字典转换为Pandas DataFrame
性能问题根因
你之前用df.loc[df.shape[0]] = list_with_rewards逐行追加的写法性能极差,核心原因是Pandas DataFrame底层基于固定大小的数组存储,每执行一次逐行追加,都会触发整个DataFrame的内存重分配、全量数据拷贝和索引重建,时间复杂度为O(n²),数据量越大耗时增长越快,属于Pandas操作的典型反模式。
最快实现方案
性能最优的实现思路是先一次性遍历嵌套字典把所有奖励记录展平到一个单层列表,再单次调用DataFrame构造方法生成结果,全程无反复内存拷贝,时间复杂度为O(n),相比逐行追加性能提升可达数十到上百倍。
实现代码如下:
import pandas as pd # 遍历三层嵌套结构,一次性收集所有奖励记录 all_rewards = [] for up, uid_level_map in my_dict.items(): for uid, level_reward_map in uid_level_map.items(): for level, rewards in level_reward_map.items(): # 直接批量追加当前节点下的所有奖励,无需逐行append all_rewards.extend(rewards) # 单次构造DataFrame,指定对应列名即可 result_df = pd.DataFrame( all_rewards, columns=["ID", "user_profile", "user_id", "Chest_type", "item_code", "amount"] )
方案说明
- 单条奖励记录本身已经包含全部所需字段,遍历过程不需要额外拼接字段,直接批量收集即可,逻辑简单不易出错
- 十万级数据量场景下,该方案耗时通常在百毫秒级别
- 若数据量达到百万级以上,可在生成DataFrame后将数值类列(ID、user_id、item_code、amount)转换为
int32等更小的数值类型,进一步降低内存占用,对生成速度也有小幅提升
内容的提问来源于stack exchange,提问作者ianux22
相关产品推荐
相关产品推荐

