如何从含多字典的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'])
代码说明
- 处理空值:直接判断单元格是否为
nan,是的话返回原空值,避免破坏数据结构。 - 统一格式:如果单元格是单个字典(而非列表),自动转成包含该字典的列表,保证后续遍历逻辑一致。
- 提取拼接:遍历列表中的每个字典,取出
name字段,用,拼接成字符串输出。
内容的提问来源于stack exchange,提问作者user14946795
相关产品推荐
相关产品推荐

