You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:15:09