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

如何用Python的Pandas提取嵌套JSON文件中的score字段?

解决方案

1. 单个JSON文件的score提取

你的JSON存在多层嵌套,且response_sets下的键是随机ID,需要先处理这一结构,才能用Pandas正确提取数据。这里需要提取两类score:

  • audit_data.score:整体评分
  • response_sets下每个问题选项的responses.score

方法一:手动遍历提取

import pandas as pd
import json

# 读取JSON文件
with open("your_file.json", "r") as f:
    raw_data = json.load(f)

# 提取整体评分
audit_score = raw_data["audit_data"]["score"]

# 提取所有选项的评分
response_details = []
for question_id, question_content in raw_data["template_data"]["response_sets"].items():
    for resp in question_content["responses"]:
        response_details.append({
            "question_id": question_id,
            "response_label": resp["label"],
            "response_score": resp["score"]
        })

# 转换为DataFrame
audit_df = pd.DataFrame({"audit_score": [audit_score]})
response_df = pd.DataFrame(response_details)

# 合并两类数据(按需选择)
final_single_df = pd.concat([audit_df]*len(response_df), ignore_index=True).join(response_df)

方法二:使用pd.json_normalize

先将response_sets的字典转为列表,再用normalize展开嵌套:

import pandas as pd
import json

with open("your_file.json", "r") as f:
    raw_data = json.load(f)

# 预处理:把response_sets的字典转成列表
processed_data = raw_data.copy()
processed_data["template_data"]["response_sets"] = list(processed_data["template_data"]["response_sets"].values())

# 用normalize提取数据
df = pd.json_normalize(
    processed_data,
    # 指定要展开的嵌套列表路径
    record_path=["template_data", "response_sets", "responses"],
    # 指定要保留的顶层/其他层级元数据
    meta=[
        "template_id",
        "audit_id",
        ["audit_data", "score"]
    ]
)

# 重命名列名更直观
df.rename(columns={"audit_data.score": "audit_score", "score": "response_score"}, inplace=True)

2. 批量处理多个JSON文件

遍历指定文件夹下所有.json文件,重复提取逻辑并合并数据:

import os
import pandas as pd
import json

folder_path = "存放JSON的文件夹路径"
all_records = []

for filename in os.listdir(folder_path):
    if filename.endswith(".json"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "r") as f:
            raw_data = json.load(f)
        
        # 提取基础信息和整体评分
        base_info = {
            "file_name": filename,
            "template_id": raw_data["template_id"],
            "audit_id": raw_data["audit_id"],
            "audit_score": raw_data["audit_data"]["score"]
        }
        
        # 提取每个选项的评分并关联基础信息
        for question_id, question_content in raw_data["template_data"]["response_sets"].items():
            for resp in question_content["responses"]:
                record = base_info.copy()
                record.update({
                    "question_id": question_id,
                    "response_label": resp["label"],
                    "response_score": resp["score"]
                })
                all_records.append(record)

# 生成最终合并后的DataFrame
final_batch_df = pd.DataFrame(all_records)
print(final_batch_df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:30:41