如何用Pandas将CSV转换为按经纬度时间分组的指定嵌套JSON?
问题:将CSV数据集转换为指定结构的嵌套JSON
需求:在Python中将CSV数据集转换为嵌套JSON,需按latitude、longitude、time字段分组,且number字段对应的嵌套JSON以数值为键。
现有代码
data_frame.groupby(['latitude','longitude','time']) .apply(lambda x: x[['u10']] .to_dict('records')) .reset_index() .rename(columns={0:'number'}) .to_json(orient='records')
当前输出
[ { "latitude": -70.2799987793, "longitude": 12.1700000763, "time": 1675231200000, "number": [ { "u10": -14.9595794678 }, { "u10": -14.733505249 }, { "u10": -15.036198616 } ] }, { "latitude": -70.2799987793, "longitude": 12.1700000763, "time": 1675252800000, "number": [ { "u10": -17.0410652161 }, { "u10": -16.2441310883 }, { "u10": -17.1734924316 } ] } ]
期望输出
[ { "latitude": -70.2799987793, "longitude": 12.1700000763, "time": 1675231200000, "number": { "0": { "u10": -14.9595794678 }, "1": { "u10": -14.733505249 }, "2": { "u10": -15.036198616 } } }, { "latitude": -70.2799987793, "longitude": 12.1700000763, "time": 1675252800000, "number": { "0": { "u10": -17.0410652161 }, "1": { "u10": -16.2441310883 }, "2": { "u10": -17.1734924316 } } } ]
解决方案
原代码中to_dict('records')生成的是列表结构,要改成键值对形式,只需修改apply内的逻辑,把列表转为以索引为键的字典:
data_frame.groupby(['latitude','longitude','time']) .apply(lambda x: dict(enumerate(x[['u10']].to_dict('records')))) .reset_index() .rename(columns={0:'number'}) .to_json(orient='records')
关键修改说明:
enumerate(x[['u10']].to_dict('records')):给每个u10字典项添加顺序索引(0、1、2...)dict():将枚举结果转换为键值对字典,索引作为键,对应u10字典作为值
如果你的数据集中有专门的number列(而非默认索引),可以直接用该列作为键:
data_frame.groupby(['latitude','longitude','time']) .apply(lambda x: x.set_index('number')[['u10']].to_dict('index')) .reset_index() .rename(columns={0:'number'}) .to_json(orient='records')
内容的提问来源于stack exchange,提问作者Ksyar2001
相关产品推荐
相关产品推荐

