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

如何遍历嵌套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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 05:54:00