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

Python实现无根节点JSON数组基于多重嵌套条件的过滤问题

解决方案

提供两种可直接使用的实现方式:

方式1:Pandas向量化实现(数据量大时效率更高)

核心逻辑是通过apply批量判断第一个条件,再结合日期字段的过滤条件同时筛选:

import pandas as pd

# 读取ndjson格式数据
data = pd.read_json('myFile.ndjson', lines=True)
# 转换finalDate为日期类型,方便提取年份
data['finalDate'] = pd.to_datetime(data['finalDate'])

# 校验outter.inner中是否存在code=9351的元素
def check_code(outter_info):
    return any(item['code'] == '9351' for item in outter_info['inner'])

# 同时应用两个条件过滤
filter_mask = data['outter'].apply(check_code) & (data['finalDate'].dt.year >= 1995)
result = data[filter_mask]

# 若需要输出为字典列表,可添加下行代码
# result = result.to_dict('records')

方式2:循环遍历实现(逻辑更直观,符合你现有编码习惯)

直接遍历每行完整数据,同时校验两个条件:

import pandas as pd

data = pd.read_json('myFile.ndjson', lines=True)
data['finalDate'] = pd.to_datetime(data['finalDate'])
matched_list = []

for _, row in data.iterrows():
    # 校验条件1:存在code=9351的元素
    code_match = False
    for inner_item in row['outter']['inner']:
        if inner_item['code'] == '9351':
            code_match = True
            break
    # 校验条件2:年份大于等于1995
    year_match = row['finalDate'].year >= 1995
    
    if code_match and year_match:
        matched_list.append(row.to_dict())

说明

你之前的问题是仅遍历单个列的元素,无法获取同一行其他字段,改为遍历完整行数据即可同时访问所有字段完成多条件校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:02