如何高效将Pandas DataFrame转为指定字典列表并保存为JSON文件
Pandas DataFrame转指定字典列表并保存JSON的高效方法
原始DataFrame
device_id user_id level d_id1 u_id1 1 d_id1 u_id2 -1 d_id1 u_id3 1 d_id2 u_id100 -1 d_id3 u_id100 1 d_id3 u_id4 1
目标格式(字典列表)
[ { "device_id": "d_id1", "result_key": [ {"user_id": "u_id1", "level": 1}, {"user_id": "u_id2", "level": -1}, {"user_id": "u_id3", "level": 1} ] }, { "device_id": "d_id2", "result_key": [{"user_id": "u_id100", "level": -1}] }, { "device_id": "d_id3", "result_key": [ {"user_id": "u_id100", "level": 1}, {"user_id": "u_id4", "level": 1} ] } ]
高效实现方法
直接利用Pandas内置的分组和字典转换能力,避免手动循环,在数据量较大时优势明显:
- 导入依赖库
import pandas as pd import json
- 加载/构造DataFrame
如果是已有数据,直接加载即可;示例中构造测试数据:
df = pd.DataFrame({ 'device_id': ['d_id1', 'd_id1', 'd_id1', 'd_id2', 'd_id3', 'd_id3'], 'user_id': ['u_id1', 'u_id2', 'u_id3', 'u_id100', 'u_id100', 'u_id4'], 'level': [1, -1, 1, -1, 1, 1] })
- 分组转换为目标结构
按device_id分组,将每组的user_id和level转为字典列表,最终整合成目标格式的字典列表:
result = ( df.groupby('device_id') .apply(lambda x: x[['user_id', 'level']].to_dict('records')) .reset_index(name='result_key') .to_dict('records') )
- 保存为JSON文件
用json.dump写入文件,indent参数可让JSON格式更易读:
with open('device_result.json', 'w', encoding='utf-8') as f: json.dump(result, f, indent=2, ensure_ascii=False)
方法优势
- 依赖Pandas的矢量化操作,比手动循环处理大数据集更快、资源占用更低
- 内置方法
to_dict('records')直接完成行到字典列表的转换,代码简洁易维护
内容的提问来源于stack exchange,提问作者Man Fan
相关产品推荐
相关产品推荐

