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

Python筛选JSON中指定reportSection的results并转为DataFrame

问题解决:筛选指定reportSection的results并转为DataFrame

问题背景

从API获取JSON数据后,需筛选出reportSection字段值为Report Detail的条目,提取其results数据并转换为Pandas DataFrame,但现有代码运行报错。

错误原因分析

原代码存在两个核心问题:

  • 使用pd.read_json(datapull)将JSON数组转为DataFrame后,for r in data实际迭代的是DataFrame的列名,而非每个JSON对象,导致后续处理逻辑完全偏离预期。
  • section_results函数中,section = record.get('reportSection', ...)获取到的是字符串类型的reportSection值,字符串没有get方法,调用section.get('results')会直接抛出属性错误。

正确实现代码

方法一:原生Python列表处理(逻辑直观)

import pandas as pd
import json

# 解析API返回的JSON文本为Python列表
datapull = response_API.text
data_list = json.loads(datapull)

# 筛选目标条目并收集results数据
target_results = []
for item in data_list:
    if item.get('reportSection') == 'Report Detail':
        target_results.extend(item.get('results', []))

# 转换为DataFrame
df = pd.DataFrame(target_results)
print(df)

方法二:Pandas原生操作(高效简洁)

import pandas as pd

datapull = response_API.text
# 读取JSON为DataFrame,每个JSON对象对应一行,results列为列表格式
df_raw = pd.read_json(datapull)

# 筛选目标行,展开results列表并转为结构化DataFrame
target_df = df_raw[df_raw['reportSection'] == 'Report Detail']['results'].explode().apply(pd.Series)
print(target_df)

代码说明

  • 方法一:先将JSON转为Python原生列表,遍历筛选符合条件的条目,用extend合并所有目标results数据,最后转为DataFrame,适合新手理解逻辑。
  • 方法二:利用Pandas的explode拆分列表元素为单独行,再通过apply(pd.Series)将字典结构展开为列,适合熟悉Pandas操作的场景,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:46:00