如何遍历嵌套JSON的指定键值正确填充pandas DataFrame
嵌套JSON指定字段提取填充DataFrame实现方案
方案1:适配遍历逻辑的正确写法
你原有循环写法的核心问题是未逐层提取指定键值,直接将完整JSON条目赋值给列字段,且循环内反复修改DataFrame会带来不必要的性能损耗。更合理的遍历逻辑是先暂存整理好的行数据,最后一次性生成DataFrame:
# 定义目标列 target_columns = ['name','age','street','city'] row_buffer = [] for item in json_data: # 逐层提取对应层级的字段值 single_row = { "name": item["name"], "age": item["age"], # 提取嵌套在address下的二级字段 "street": item["address"]["street"], "city": item["address"]["city"] } row_buffer.append(single_row) # 一次性生成目标DataFrame df_new = pd.DataFrame(row_buffer, columns=target_columns)
上述代码生成的df_new完全匹配预期结构,嵌套的address字段已被拆分为独立的street、city列。
如果需要逐行追加的兼容实现(不推荐,数据量较大时性能极差),可使用pandas 2.0+支持的pd.concat替代已被弃用的df.append方法:
df_new = pd.DataFrame(columns=['name','age','street','city']) for item in json_data: single_row = pd.DataFrame([{ "name": item["name"], "age": item["age"], "street": item["address"]["street"], "city": item["address"]["city"] }]) df_new = pd.concat([df_new, single_row], ignore_index=True)
方案2:pandas原生嵌套JSON处理(无需手写循环)
使用专门用于结构化嵌套JSON的pd.json_normalize方法,可自动拆分嵌套字典为独立列,性能和容错性均优于手写遍历:
# 自动展开嵌套的address字段,生成标准化数据 normalized_json = pd.json_normalize(json_data) # 筛选需要的字段,替换嵌套结构生成的默认列名 df_new = normalized_json[["name", "age", "address.street", "address.city"]] df_new.columns = ["name", "age", "street", "city"]
该方法的优势为:即使部分JSON条目缺失嵌套字段,也会自动填充空值而非抛出键错误,适配更复杂的JSON结构时无需调整取值逻辑。
内容的提问来源于stack exchange,提问作者Yasi
相关产品推荐
相关产品推荐

