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
相关产品推荐
相关产品推荐

