如何在pandas中访问字典类型列字段并提取嵌套值生成新列
解决Pandas DataFrame列中嵌套字典/列表的字段提取问题
你之前写法报错的核心原因是df['c']返回的是Pandas的Series对象,直接对Series用['some_data']会尝试匹配行索引为some_data的元素,而不是逐行提取字典对应key的值。
场景1:单层级字典提取
对应你最开始的示例:
df = pd.DataFrame([[30, 20, {'some_data': 30}]], columns=['a', 'b', 'c'])
可以直接用Series的str.get方法逐行提取字典key:
df['new_column'] = df['c'].str.get('some_data')
场景2:多层嵌套结构提取
对应你补充的嵌套列表+字典的场景:
df = pd.DataFrame([[30, 20, {'some_data': [{'other_data': 0}]}]], columns=['a', 'b', 'c'])
可以链式调用str.get和列表索引访问方法str[],按层级逐层取值:
# 取值路径:c列字典 -> some_data key -> 列表第0个元素 -> 字典的other_data key df['new_column'] = df['c'].str.get('some_data').str[0].str.get('other_data')
通用容错方案(适合复杂场景)
如果实际数据中存在部分行结构缺失、字段不存在的情况,推荐用自定义函数+apply的方式实现,避免报错:
def extract_value(row): try: # 按你的实际取值路径修改即可 return row['c']['some_data'][0]['other_data'] except (KeyError, IndexError, TypeError): # 结构不匹配时返回自定义默认值 return None df['new_column'] = df.apply(extract_value, axis=1)
内容的提问来源于stack exchange,提问作者wviana
相关产品推荐
相关产品推荐

