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

如何在Pandas DataFrame中将字典列表转换为值列表并新增列

解决方法:从Pandas字典列表列提取指定键值生成新列

这需求太常见啦,给你两种实用的解决办法,根据你的数据集大小灵活选择:

方法一:apply + 列表推导式(简单直观,适合小数据集)

先构造可直接测试的示例数据,然后一步生成新列:

import pandas as pd

# 构造你的示例DataFrame
data = {
    'id': ['a1', 'a2', 'a3', 'a4'],
    'list_dicts': [
        [{'name':'cat'}, {'name':'dog'}],
        [{'name':'toy'}, {'name':'boy'}],
        [{'name':'jack'}, {'name':'jill'}, {'name':'sam'}],
        [{'name':'pig'}]
    ]
}
df = pd.DataFrame(data).set_index('id')

# 核心代码:提取每个字典的'name'值组成新列表
df['list_from_dict'] = df['list_dicts'].apply(lambda x: [d['name'] for d in x])

运行后查看结果:

print(df)

输出会和你期望的完全一致:

list_dicts       list_from_dict
id                                                 
a1        [{'name': 'cat'}, {'name': 'dog'}]        ['cat', 'dog']
a2        [{'name': 'toy'}, {'name': 'boy'}]        ['toy', 'boy']
a3  [{'name': 'jack'}, {'name': 'jill'}, {'name': 'sam'}]  ['jack', 'jill', 'sam']
a4               [{'name': 'pig'}]              ['pig']

这个方法逻辑直白:用apply遍历每行的字典列表,通过列表推导式把每个字典的name值提取出来,拼成新列表。

方法二:explode + groupby(高效向量化,适合大数据集)

如果你的DataFrame行数很多,apply的循环效率会偏低,这时候可以用Pandas的向量化操作来提速:

# 步骤1:把字典列表拆分成单独的行
exploded_df = df.explode('list_dicts')
# 步骤2:从每个字典中提取'name'值
exploded_df['name'] = exploded_df['list_dicts'].str['name']
# 步骤3:按id分组,把name值重新聚合为列表
df['list_from_dict'] = exploded_df.groupby('id')['name'].agg(list)

这种方法完全利用Pandas的内置优化操作,避免了Python层面的循环,在数据量较大时性能会比apply好很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:09