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

如何从DataFrame的字典类型列中提取每行指定键的对应值

Pandas提取字典列中指定键值的实现方法

你的Data列每行存储结构一致的字典,要提取所有行address1键对应的值,有3种常用实现,不需要手写低效的逐行遍历:

  • 方法1:str访问器直接取值(最简洁,优先用)
    Pandas针对序列中存储的字典/列表类元素,提供了.str索引访问语法,一行代码就能完成提取:

    # 提取address1字段,返回与原表索引对齐的Series
    df['address1'] = df['Data'].str['address1']
    

    如果列中存在空值、非字典类型的异常数据,可以链式调用.fillna('')填充空值。

  • 方法2:apply映射取值(兼容性、容错性最高)
    如果使用的Pandas版本较旧,或是列中存在脏数据,可以用apply自定义取值逻辑,避免报错:

    # 逐行判断取值,遇到非字典/无对应键的情况返回空字符串
    df['address1'] = df['Data'].apply(
        lambda row: row.get('address1', '') if isinstance(row, dict) else ''
    )
    
  • 方法3:字典列全量展开(适合需要提取多个字段的场景)
    如果后续还要提取city、zip_code、state等同字典内的其他字段,直接将整个字典列拆分为独立列效率更高:

    # 将字典列展开为普通字段表
    data_cols = pd.json_normalize(df['Data'])
    # 拼接回原表,删除原字典列
    df = pd.concat([df.drop(columns=['Data']), data_cols], axis=1)
    

    处理完成后直接访问df['address1']即可拿到目标值,其余字典内的字段也会自动生成对应列。

注意:不推荐使用iterrows()、itertuples()手写逐行循环的方式实现,这类写法运行效率远低于上述方法,数据量较大时性能差距会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:45:44