Python中如何最高效地将Dataframe转换为指定结构dictionary
Python 最高效DataFrame转字典实现方案
性能最优的实现方式是直接调用pandas原生内置的DataFrame.to_dict()方法,该方法底层由C实现,不需要在Python层写循环遍历,性能远高于手写iterrows()/itertuples()遍历拼接的方案,数据量越大性能优势越明显。
你只需要传入不同的orient参数,就能直接得到两种最常用的目标字典结构:
第一种结构:外层键为列名,内层键为行索引,值为对应单元格内容
直接使用默认参数即可,代码示例:import pandas as pd # 示例测试DataFrame df = pd.DataFrame( {"语文": [92, 88, 95], "数学": [87, 96, 90]}, index=["张三", "李四", "王五"] ) # 转换为列优先字典 col_priority_dict = df.to_dict(orient="dict")输出结构如下:
{ "语文": {"张三": 92, "李四": 88, "王五": 95}, "数学": {"张三": 87, "李四": 96, "王五": 90} }第二种结构:外层键为行索引,内层键为列名,值为对应单元格内容
传入orient="index"参数即可,代码示例:# 转换为行优先字典 row_priority_dict = df.to_dict(orient="index")输出结构如下:
{ "张三": {"语文": 92, "数学": 87}, "李四": {"语文": 88, "数学": 96}, "王五": {"语文": 95, "数学": 90} }
性能注意事项
- 不要在Python层手写循环拼接字典:
iterrows()本身存在类型推断开销,万行以上数据场景下,性能比内置to_dict()低10~100倍。 - 如果需要自定义键名、值格式,优先用pandas向量化方法先修改DataFrame的列名、索引、值,再调用
to_dict(),不要在循环内做值转换。 - 如果目标是列表套行字典的结构(每行对应一个键为列名的字典,存入列表),可以传入
orient="records"直接生成,同样是最高效的实现。
内容的提问来源于stack exchange,提问作者Dennis Beem
相关产品推荐
相关产品推荐

