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

Pandas读取JSON数据量不符及添加solution字段求助

嵌套JSON处理问题排查与解决

一、过滤行数不符的问题

你遇到的核心问题是嵌套JSON未正确扁平化,导致severity_modification_type列并未读取到所有目标值,大部分行可能是NaN,用.query("severity_modification_type.ne('NONE')")过滤自然只得到少量结果。

解决步骤:

  1. 放弃直接用pd.read_json,改用pd.json_normalize解析嵌套JSON——这是处理多层嵌套结构的标准方式。
  2. 先确认字段的实际路径:查看JSON结构,确认severity_modification_type是在顶层还是嵌套在某个子键下(比如data.severity_modification_type)。

示例代码:

import pandas as pd
import json

# 读取72MB的JSON文件(直接加载完全可行)
with open('你的文件.json', 'r', encoding='utf-8') as f:
    json_data = json.load(f)

# 扁平化数据,根据JSON结构调整参数
# 如果JSON是条目数组,直接用pd.json_normalize(json_data)
# 如果条目嵌套在某个键下(比如{"results": [...]}),则指定record_path='results'
df = pd.json_normalize(json_data)

# 先打印所有列名,确认severity_modification_type的列名是否正确
print(df.columns.tolist())

# 用布尔索引过滤(比query更直观,避免语法陷阱)
filtered_df = df[df['severity_modification_type'] != 'NONE']

# 验证行数
print(f"过滤后行数:{len(filtered_df)}")

二、提取plugin.solution字段

同样依赖json_normalize,两种实现方式:

方法1:扁平化时直接提取

如果plugin是顶层字典,json_normalize会自动将其展开为plugin.solution格式的列。若需明确指定,可写:

df = pd.json_normalize(
    json_data,
    meta=['plugin.solution']  # 强制提取该嵌套字段
)

方法2:事后处理已有的DataFrame

如果已经有未完全扁平化的df,用apply提取:

df['plugin.solution'] = df['plugin'].apply(lambda x: x.get('solution') if isinstance(x, dict) else None)

关键注意点

  • 务必确认JSON的实际嵌套层级:比如你的JSON结构如果是{"items": [{"severity_modification_type": "...", "plugin": {...}}]},必须在json_normalize中指定record_path='items',否则无法正确读取每个条目。
  • 可以用df['severity_modification_type'].value_counts()查看该列的值分布,快速定位问题——如果大部分是NaN,说明字段路径没找对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:38:33