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

如何高效从DataFrame嵌套字典提取指定字段?含get()方法使用疑问

嘿,这个需求太常见了!你现在用try-except的方法虽然可行,但确实有点繁琐,用get()来处理嵌套字典的提取绝对是更优雅高效的选择,我来给你捋两种好用的实现方式:

方法一:链式调用get() + pandasapply

直接利用get()的默认值参数,逐层处理嵌套结构,同时结合pandas的apply函数批量处理整列数据,代码非常简洁:

# 直接生成新列存储提取的地址
testing['addresses'] = testing['Results_dict'].apply(
    lambda x: x.get('result', {}).get('Address', 'No info')
)

解释一下逻辑:

  1. 对Results_dict列的每个字典对象x,先调用x.get('result', {}):如果当前字典里没有'result'这个键,就返回一个空字典{}(而不是抛出KeyError),这样后续的操作不会报错。
  2. 接着对第一步的结果(要么是'result'对应的子字典,要么是空字典)调用.get('Address', 'No info'):如果存在'Address'键就取对应的值,不存在就返回默认的'No info'。

这种方法比手动写for循环高效得多,因为pandas的apply内部做了优化,而且代码量少,可读性也更强。

方法二:用pd.json_normalize展开嵌套字典

如果你需要提取多个嵌套字段(比如同时取Address、website、status),用json_normalize把嵌套字典直接展开成DataFrame的列会更方便:

# 把Results_dict列的嵌套字典展开成平级列
normalized_df = pd.json_normalize(testing['Results_dict'])
# 提取result.Address列,缺失值用'No info'填充
testing['addresses'] = normalized_df['result.Address'].fillna('No info')

优势:

展开后你可以直接通过列名(比如result.website、result.status)提取其他字段,一次处理所有需要的嵌套数据,不用重复写链式get,适合多字段提取的场景。

两种方法都能替代原来的try-except循环,效率和可读性都更好,你可以根据自己的需求选~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:37:49