Python中如何按日期条件查询JSON字典键值 处理GitHub仓库API数据
实现步骤及完整代码
import pandas as pd import json url = "https://api.github.com/users/mralexgray/repos" # 读取接口返回的仓库数据 df = pd.read_json(url) # 1. 将字符串格式的created_at转为带时区的datetime格式,方便后续日期比较和计算 df['created_at'] = pd.to_datetime(df['created_at']) # 2. 筛选created_at晚于等于2013-06-04的仓库 filter_benchmark = pd.to_datetime('2013-06-04', utc=True) filtered_df = df[df['created_at'] >= filter_benchmark].copy() # 3. 提取嵌套字段值 ## 提取owner下的login、id(对应需求中的owner key) filtered_df['owner_login'] = filtered_df['owner'].apply(lambda x: x.get('login')) filtered_df['owner_key'] = filtered_df['owner'].apply(lambda x: x.get('id')) ## 提取license下的key、name,兼容无license的空值场景 filtered_df['license_key'] = filtered_df['license'].apply(lambda x: x.get('key') if pd.notna(x) else None) filtered_df['license_name'] = filtered_df['license'].apply(lambda x: x.get('name') if pd.notna(x) else None) # 4. 将符合条件的仓库created_at延后1个月 filtered_df['created_at_after_delay'] = filtered_df['created_at'] + pd.DateOffset(months=1) # 输出最终结果 result = filtered_df[['owner_login', 'owner_key', 'license_key', 'license_name', 'created_at', 'created_at_after_delay']] print(result)
关键逻辑说明
- 嵌套字段处理:接口返回的
owner、license都是嵌套字典结构,用apply结合get方法取值,避免字段不存在时报错 - 日期一致性:统一转换为带UTC时区的datetime格式,避免不同时区的日期比较报错
- 用
copy()生成新的筛选后数据框,避免后续修改触发pandas链式赋值警告
内容的提问来源于stack exchange,提问作者Shaon Paul
相关产品推荐
相关产品推荐

