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

如何将嵌套JSON指定键值对映射到Pandas DataFrame并兼容缺失键

解决方案

关于嵌套JSON的疑问

这属于嵌套JSON结构,外层是一个对象(字典),每个键对应的值又是一个嵌套的子对象(子字典),完全符合JSON的嵌套定义。

1. 让lambda映射方案兼容缺失键

使用字典的get()方法做双层容错,避免键不存在时抛出KeyError:

df['description'] = df['key'].map(lambda x: d.get(x, {}).get('description', pd.NA))
  • d.get(x, {}):若DataFrame中的key不在字典d内,返回空字典,防止外层键缺失报错
  • .get('description', pd.NA):若子键description不存在,返回pd.NA(也可替换为None等自定义占位值)

2. 无需新建DataFrame同时赋值多列

方法1:apply结合Series直接赋值

df[['size', 'description']] = df['key'].apply(
    lambda x: pd.Series({
        'size': d.get(x, {}).get('size', pd.NA),
        'description': d.get(x, {}).get('description', pd.NA)
    })
)

方法2:提取函数+apply展开(更易读)

如果追求代码可读性,可单独定义提取逻辑函数:

def extract_size_desc(key):
    item = d.get(key, {})
    return item.get('size', pd.NA), item.get('description', pd.NA)

df[['size', 'description']] = df['key'].apply(extract_size_desc, result_type='expand')
  • result_type='expand'会自动将函数返回的元组展开为多列,直接赋值给原DataFrame的新列,无需创建中间DataFrame。

补充:优化原join方案(可选)

若不介意原地修改,原join方案可不用新建变量,直接更新原DataFrame:

df = df.join(pd.DataFrame.from_dict(d, orient='index', columns=['size','description']), on='key')

内容的提问来源于stack exchange,提问作者Jess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:54:18