如何在Jupyter Notebook中用Python筛选含CSV中ID的JSON数据?
解决方案
首先修正你代码里的小笔误:定义的变量是var_filter,但display时误写为act_filter,需要改成display(var_filter)。
接下来分两步完成筛选:
1. 提取CSV中的目标ID集合
CSV中存储的是需要保留的ID,先将这些ID提取并转换为集合(集合的成员查询效率远高于列表,数据量大时优势明显):
# 提取CSV的id列,转字符串确保与JSON中的id类型匹配,再转成集合 filtered_ids = set(var_filter['id'].astype(str).tolist())
这里用astype(str)是为了避免类型不匹配问题——比如CSV中的ID是数字类型,而JSON中的ID是字符串类型,直接对比会导致筛选失败。
2. 筛选JSON数据
通过列表推导式遍历加载好的JSON数据,只保留id存在于filtered_ids中的条目:
# 筛选符合条件的JSON条目 filtered_data = [item for item in data if item['id'] in filtered_ids]
完整代码示例
import json import pandas as pd from IPython.display import display # 读取包含id的CSV文件 var_filter = pd.read_csv('file.csv') display(var_filter) # 修正笔误:act_filter -> var_filter # 提取需要保留的id集合 filtered_ids = set(var_filter['id'].astype(str).tolist()) # 加载JSON文件 with open('file.json') as f: data = json.load(f) # 执行筛选 filtered_data = [item for item in data if item['id'] in filtered_ids] # 展示筛选结果 print("筛选后的JSON数据:") display(filtered_data) # 可选:将筛选结果保存为新的JSON文件 with open('filtered_file.json', 'w', encoding='utf-8') as f: json.dump(filtered_data, f, ensure_ascii=False, indent=4)
补充说明
- 如果你的CSV中存储ID的列名不是
id,请将var_filter['id']替换为实际列名(比如var_filter['user_id'])。 - 若不需要保存筛选结果,可以删除最后一段保存JSON的代码。
内容的提问来源于stack exchange,提问作者Wong Chloe
相关产品推荐
相关产品推荐

