如何将CSV转换为嵌套JSON?实现预期格式及简化方案
实现CSV转嵌套JSON的简便方法
先明确场景:假设你的CSV数据示例如下:
order_date,customer_id,amount 2023-10-01,C001,100 2023-10-01,C002,200 2023-10-02,C003,150
预期的嵌套JSON格式是按order_date作为外层键,内层包含当天所有客户订单数据:
[ { "order_date": "2023-10-01", "customers": [ {"customer_id": "C001", "amount": 100}, {"customer_id": "C002", "amount": 200} ] }, { "order_date": "2023-10-02", "customers": [ {"customer_id": "C003", "amount": 150} ] } ]
最简实现代码
用pandas的groupby+apply就能搞定,不用写复杂循环:
import pandas as pd # 1. 读取CSV文件 df = pd.read_csv('你的订单文件.csv') # 2. 按order_date分组,构造嵌套结构 nested_data = df.groupby('order_date').apply( lambda group: group.drop('order_date', axis=1).to_dict('records') ).reset_index(name='customers') # 3. 转成带缩进的JSON nested_json = nested_data.to_json(orient='records', indent=2) # 打印或保存结果 print(nested_json) # 保存到文件的话: # with open('嵌套订单.json', 'w', encoding='utf-8') as f: # f.write(nested_json)
代码解释
groupby('order_date'):把同一天的订单归为一组apply(...):对每组数据,先删掉order_date列(因为要把它作为外层键),再转成字典列表(对应内层的客户订单)reset_index(name='customers'):把分组的order_date变回普通列,同时给内层订单列表命名为customersto_json(orient='records', indent=2):生成数组格式的JSON,indent=2是为了排版美观,方便查看
扩展说明
如果CSV还有其他需要放在外层的字段(比如order_month),只需调整groupby的键,比如groupby(['order_month', 'order_date']),内层处理时对应去掉这些字段即可。
内容的提问来源于stack exchange,提问作者jojo
相关产品推荐
相关产品推荐

