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

如何用Python拆分JSON文件中的元数据与多组测量数据

解决JSON元数据与测量数据拆分问题

先修正你代码里的明显错误

你第二段代码的问题是变量名搞混了:把加载的JSON数据赋值给了measurements变量,但后面却去访问data['measurements'],这肯定会报KeyError。就算变量名改对,如果你的JSON里measurements不是顶级键,而是嵌套在data数组的每个条目里,直接取顶级键还是会错。

基于常见JSON结构的解决方案

假设你的JSON结构大概是这样(如果实际结构不同,你可以补充示例):

{
  "data": [
    {
      "sample_id": "S001",
      "test_time": "2024-05-20",
      "measurements": [{"datax": 1.2, "datay": 3.4}, {"datax": 2.3, "datay":4.5}]
    },
    {
      "sample_id": "S002",
      "test_time": "2024-05-21",
      "measurements": [{"datax":5.6, "datay":6.7}, {"datax":7.8, "datay":8.9}]
    }
  ]
}

1. 提取元数据列表

你已经实现了这部分,这里再给个通用写法:

import json
import pandas as pd

with open('Filename.json') as f:
    raw_data = json.load(f)

# 提取元数据(假设元数据是每个data条目中除measurements外的字段)
metadata_list = []
for item in raw_data['data']:
    # 复制当前条目的所有键值对,排除measurements字段
    meta = {k: v for k, v in item.items() if k != 'measurements'}
    metadata_list.append(meta)

# 转成DataFrame查看
meta_df = pd.DataFrame(metadata_list)
display(meta_df)

2. 按组提取所有datax、datay

如果要把每组的测量数据单独整理成列表:

measurements_groups = []
for item in raw_data['data']:
    # 提取当前组的所有datax和datay
    group_datax = [m['datax'] for m in item['measurements']]
    group_datay = [m['datay'] for m in item['measurements']]
    measurements_groups.append({
        "sample_id": item['sample_id'],  # 关联元数据标识
        "datax_list": group_datax,
        "datay_list": group_datay
    })

# 转成DataFrame查看
groups_df = pd.DataFrame(measurements_groups)
display(groups_df)

3. 展开测量数据为扁平结构(更适合数据分析)

如果需要把每个测量点单独成行,同时保留对应的元数据:

flat_measurements = []
for item in raw_data['data']:
    meta = {k: v for k, v in item.items() if k != 'measurements'}
    # 遍历当前组的每个测量点,合并元数据和测量数据
    for m in item['measurements']:
        flat_row = {**meta, **m}
        flat_measurements.append(flat_row)

# 转成DataFrame查看
flat_df = pd.DataFrame(flat_measurements)
display(flat_df)

为什么你之前的代码只显示首个测量条目

你第一段代码pd.DataFrame(data['data'])会把data数组里的每个条目转成一行,但measurements是数组类型,pandas默认只会显示数组的第一个元素(或者以数组形式存储,但看起来像是只显示首个条目),所以需要手动遍历拆分嵌套的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:46:33