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

如何将Pandas DataFrame列中的字典值拆分到指定多列

问题:从嵌套字典列表中提取指定字段到独立新列

原始代码与数据

import numpy as np
import pandas as pd
data = { 'ID': [112,113],'empDetails':[[{'key': 'score', 'value': 2},{'key': 'Name', 'value': 'Ajay'}, {'key': 'Department', 'value': 'HR'}],[ {'key': 'salary', 'value': 7.5},{'key': 'Name', 'value': 'Balu'}]]}
dataDF = pd.DataFrame(data)

# 此前尝试的方法(未成功)
# dataDF['newColumns'] = dataDF['empDetails'].apply(lambda x: x[0].get('key'))
# dataDF = dataDF['empDetails'].apply(pd.Series)

# create dataframe
# dataDF = pd.DataFrame(dataDF['empDetails'], columns=dataDF['empDetails'].keys())

# create the dataframe
# df = pd.concat([pd.DataFrame(v, columns=[k]) for k, v in dataDF['empDetails'].items()], axis=1)
# print(dataDF['empDetails'].items())
display(dataDF)

需求说明

现有上述Pandas DataFrame,其中empDetails列的元素是由key-value字典组成的列表。需要遍历该列,将Name、salary、Department对应的value值提取到3个独立新列中。此前尝试用pd.Series拆分字典,但因列顺序不固定无法正确重命名列,需高效可行的实现方法。

解决方案

方法一:直接提取指定字段(高效简洁)

通过apply配合生成器表达式,精准匹配目标key,完全不受字典顺序影响:

import numpy as np
import pandas as pd

data = { 'ID': [112,113],'empDetails':[[{'key': 'score', 'value': 2},{'key': 'Name', 'value': 'Ajay'}, {'key': 'Department', 'value': 'HR'}],[ {'key': 'salary', 'value': 7.5},{'key': 'Name', 'value': 'Balu'}]]}
dataDF = pd.DataFrame(data)

# 提取Name字段(假设每条数据都包含该字段)
dataDF['Name'] = dataDF['empDetails'].apply(lambda x: next(item['value'] for item in x if item['key'] == 'Name'))
# 提取salary和Department,不存在时返回NaN避免报错
dataDF['salary'] = dataDF['empDetails'].apply(lambda x: next((item['value'] for item in x if item['key'] == 'salary'), np.nan))
dataDF['Department'] = dataDF['empDetails'].apply(lambda x: next((item['value'] for item in x if item['key'] == 'Department'), np.nan))

# 可选:删除原empDetails列
dataDF = dataDF.drop('empDetails', axis=1)

display(dataDF)
  • 核心逻辑:用next()遍历字典列表,精准定位匹配key的value,缺失字段返回np.nan
  • 优势:无需拆分整个列表,直接定位目标字段,性能更优,完全规避字典顺序问题

方法二:转字典后扩展为DataFrame(适合多字段提取)

先将每个列表转为标准字典,再扩展为DataFrame,最后合并需要的列:

import numpy as np
import pandas as pd

data = { 'ID': [112,113],'empDetails':[[{'key': 'score', 'value': 2},{'key': 'Name', 'value': 'Ajay'}, {'key': 'Department', 'value': 'HR'}],[ {'key': 'salary', 'value': 7.5},{'key': 'Name', 'value': 'Balu'}]]}
dataDF = pd.DataFrame(data)

# 将每个empDetails列表转为{key: value}格式的字典
emp_dict_series = dataDF['empDetails'].apply(lambda x: {item['key']: item['value'] for item in x})
# 字典序列转为DataFrame,自动将所有key转为列
emp_df = pd.DataFrame(emp_dict_series.tolist())

# 合并原数据的ID列与提取后的目标列
result_df = pd.concat([dataDF[['ID']], emp_df[['Name', 'salary', 'Department']]], axis=1)

display(result_df)
  • 核心逻辑:先统一格式为标准字典,再利用Pandas自动解析字典为列
  • 优势:一次提取所有可能的key为列,后续可灵活选择需要的字段,适合字段较多的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:21:01