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

如何从含多字典的Pandas列中提取名称字段值

问题

我有一列通过Pandas提取的数据(Column B),该列的单元格内容可能是单个字典、多个字典组成的列表,或是nan值。示例数据如下:

  • 第一行:[{"url": "mailto:Kim_Do@dmx.com", "type": 0, "id": 1021857, "name": "KIM Do", "entryListId": -1}, {"url": "mailto:Angel_Kong@dmx.com", "type": 0, "id": 1023306, "name": "Angel Kong", "entryListId": -1}, {"url": "mailto:Alex_Do@dmx.com", "type": 0, "id": 1023289, "name": "Alex Do", "entryListId": -1}]
  • 第二行:[{"url": "mailto:Ray_Chan@dmx.com", "type": 0, "id": 1021857, "name": "Ray Chan", "entryListId": -1}, {"url": "mailto:Paul_Jones@dmx.com", "type": 0, "id": 1023306, "name": "Paul Jones", "entryListId": -1}]
  • 第三、四行:nan
  • 第五行:[{"url": "mailto:Ray_Chaudhry@dmx.com", "type": 0, "id": 1021857, "name": "Ray Chaudhry", "entryListId": -1}]

需要提取每个字典中的name字段值,将同一行的名称用逗号分隔,目标输出如下:

  • 第一行:Kim Do, Angel Kong, Alex Do
  • 第二行:Ray Chan, Paul Jones
  • 第三、四行:nan
  • 第五行:Ray Chaudhry
解决方案

可以用Pandas的apply方法配合自定义函数实现需求,完整代码如下:

import pandas as pd
import numpy as np

# 模拟示例数据
data = {
    'Column B': [
        [{"url": "mailto:Kim_Do@dmx.com", "type": 0, "id": 1021857, "name": "KIM Do", "entryListId": -1}, 
         {"url": "mailto:Angel_Kong@dmx.com", "type": 0, "id": 1023306, "name": "Angel Kong", "entryListId": -1}, 
         {"url": "mailto:Alex_Do@dmx.com", "type": 0, "id": 1023289, "name": "Alex Do", "entryListId": -1}],
        [{"url": "mailto:Ray_Chan@dmx.com", "type": 0, "id": 1021857, "name": "Ray Chan", "entryListId": -1}, 
         {"url": "mailto:Paul_Jones@dmx.com", "type": 0, "id": 1023306, "name": "Paul Jones", "entryListId": -1}],
        np.nan,
        np.nan,
        [{"url": "mailto:Ray_Chaudhry@dmx.com", "type": 0, "id": 1021857, "name": "Ray Chaudhry", "entryListId": -1}]
    ]
}
df = pd.DataFrame(data)

# 定义处理函数
def extract_names(cell):
    # 保留nan值
    if pd.isna(cell):
        return np.nan
    # 兼容单个字典的情况,转成统一的列表格式
    if not isinstance(cell, list):
        cell = [cell]
    # 提取name字段并拼接
    return ', '.join([item['name'] for item in cell])

# 应用函数到目标列
df['Extracted Names'] = df['Column B'].apply(extract_names)

# 查看结果
print(df['Extracted Names'])

代码说明

  1. 处理空值:直接判断单元格是否为nan,是的话返回原空值,避免破坏数据结构。
  2. 统一格式:如果单元格是单个字典(而非列表),自动转成包含该字典的列表,保证后续遍历逻辑一致。
  3. 提取拼接:遍历列表中的每个字典,取出name字段,用, 拼接成字符串输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:15:28