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

如何从Pandas含对象列表的列提取名称列表生成新DataFrame?

Pandas提取嵌套JSON字符串中的名称列表的最优实现

针对你的需求,有两种高效的实现方式,比单独写自定义函数更简洁且性能更优:

方法一:简洁快速的列表推导式(适合小数据量)

利用ast.literal_eval安全解析字符串格式的嵌套数据,再通过列表推导式提取名称:

import ast
import pandas as pd

# 原始DataFrame
df = pd.DataFrame({'ID': [1], 'Data': ["[{'id':102, 'name': 'A'}, {'id':103, 'name': 'B'}, {'id':104, 'name': 'C'}]"]})

# 1. 将字符串格式的列表解析为Python对象
df['Data'] = df['Data'].apply(ast.literal_eval)
# 2. 提取每个字典中的name字段组成列表
df['names'] = df['Data'].apply(lambda x: [d['name'] for d in x])
# 3. 保留需要的列
df = df[['ID', 'names']]

方法二:矢量化操作(适合大数据量)

用Pandas的矢量化方法展开嵌套数据再聚合,避免逐行apply的性能损耗:

import ast
import pandas as pd

# 原始DataFrame
df = pd.DataFrame({'ID': [1], 'Data': ["[{'id':102, 'name': 'A'}, {'id':103, 'name': 'B'}, {'id':104, 'name': 'C'}]"]})

# 解析字符串为Python列表
df['Data'] = df['Data'].apply(ast.literal_eval)
# 展开嵌套的列表数据
exploded_df = df.explode('Data')
# 解析字典为结构化数据
normalized_df = pd.json_normalize(exploded_df['Data'])
# 按ID分组,将name聚合为列表
result = exploded_df[['ID']].join(normalized_df).groupby('ID')['name'].agg(list).reset_index()
result.columns = ['ID', 'names']

关键说明

  • 优先用ast.literal_eval而非eval:前者能安全处理不可信的字符串数据,避免执行恶意代码。
  • 大数据量选方法二:explode、json_normalize和groupby都是Pandas优化后的矢量化操作,比逐行apply快得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:05:02