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

如何实现Pandas DataFrame到指定自定义JSON格式的转换?

将Pandas DataFrame转换为自定义结构的JSON

原始DataFrame

date            aid     x_axis  y_axis  z_axis
0   2018-12-01  9.0     -0.71   8.75    5.23
1   2018-12-03  3.0     -0.55   10.13   1.15
2   2018-12-03  4.0     -1.84   4.56    5.74
3   2018-12-03  5.0     -1.49   4.11    7.03
4   2018-12-03  7.0     -0.40   0.83    -8.29
5   2018-12-04  4.0     -9.04   -0.04   0.55
6   2018-12-05  1.0     -3.03   6.20    7.16
7   2018-12-05  4.0     -3.93   7.69    3.82
8   2018-12-05  5.0     -4.00   7.75    1.01
9   2018-12-06  5.0     -4.47   6.79    4.12

预期JSON格式

[
  {
    "date": "2018-12-01",
    "9": {
      "mean": {
        "x_axis": -0.71,
        "y_axis": 8.75,
        "z_axis": 5.23
      }
    }
  },
  {
    "date": "2018-12-03",
    "3": {
      "mean": {
        "x_axis": -0.55,
        "y_axis": 10.13,
        "z_axis": 1.15
      }
    },
    "4": {
      "mean": {
        "x_axis": -1.84,
        "y_axis": 4.56,
        "z_axis": 5.74
      }
    },
    "5": {
      "mean": {
        "x_axis": -1.49,
        "y_axis": 4.11,
        "z_axis": 7.03
      }
    },
    "7": {
      "mean": {
        "x_axis": -0.4,
        "y_axis": 0.83,
        "z_axis": -8.29
      }
    }
  }
]

原有代码的问题

之前的代码输出存在以下问题:

  • 顶级结构以date为键,而非预期的对象数组
  • aid保留了浮点数后缀.0
  • 多了原始行索引的层级,且缺少mean包裹层

解决方案代码

import pandas as pd
import json

# 构造原始DataFrame(如果已有可跳过此步)
data3 = pd.DataFrame({
    'date': ['2018-12-01', '2018-12-03', '2018-12-03', '2018-12-03', '2018-12-03',
             '2018-12-04', '2018-12-05', '2018-12-05', '2018-12-05', '2018-12-06'],
    'aid': [9.0, 3.0, 4.0, 5.0, 7.0, 4.0, 1.0, 4.0, 5.0, 5.0],
    'x_axis': [-0.71, -0.55, -1.84, -1.49, -0.40, -9.04, -3.03, -3.93, -4.00, -4.47],
    'y_axis': [8.75, 10.13, 4.56, 4.11, 0.83, -0.04, 6.20, 7.69, 7.75, 6.79],
    'z_axis': [5.23, 1.15, 5.74, 7.03, -8.29, 0.55, 7.16, 3.82, 1.01, 4.12]
})

# 按日期和aid分组计算均值(单条数据时均值即原数据)
grouped_data = data3.groupby(['date', 'aid'])[['x_axis', 'y_axis', 'z_axis']].mean().reset_index()

# 构建目标结构的列表
result_list = []
for date_val, group in grouped_data.groupby('date'):
    date_item = {'date': date_val}
    for _, row in group.iterrows():
        # 将aid转换为整数字符串,去掉.0后缀
        aid_key = str(int(row['aid']))
        date_item[aid_key] = {
            'mean': {
                'x_axis': round(row['x_axis'], 2),
                'y_axis': round(row['y_axis'], 2),
                'z_axis': round(row['z_axis'], 2)
            }
        }
    result_list.append(date_item)

# 转换为带缩进的JSON字符串
final_json = json.dumps(result_list, indent=2)
print(final_json)

代码说明

  • 分组计算均值:使用groupby(['date', 'aid']).mean(),既符合预期中的mean字段逻辑,也能处理同一日期同一aid有多条数据的场景
  • 处理aid格式:将浮点数类型的aid转为整数再转字符串,避免出现.0后缀
  • 构造目标结构:遍历每个日期的分组,生成包含date字段和各aid对应mean结构的字典,最终组成数组,匹配预期的JSON格式
  • 保留小数精度:用round函数保留两位小数,与预期格式一致

内容的提问来源于stack exchange,提问作者salmanmehbub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07