如何从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
相关产品推荐
相关产品推荐

