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

从Pandas DataFrame的字典列表列提取指定键值的问题

解决方法

错误原因

你碰到的AttributeError: 'str' object has no attribute 'get',本质是location列里的元素不是真正的Python列表/字典,而是字符串形式的列表字典(比如本该是[{"Name":"北京"}, {"Name":"上海"}],实际存成了字符串"[{"Name":"北京"}, {"Name":"上海"}]"),直接对字符串调用字典的get()方法自然会报错。

分步解决

1. 把字符串解析为真实的列表/字典

用ast.literal_eval()把字符串格式的列表字典转成Python可操作的对象,这个方法比eval()更安全,不会执行恶意代码。

2. 提取Name值并生成逗号分隔字符串

遍历解析后的列表,取出每个字典里的Name值,再用逗号连接成字符串。

完整代码示例

import pandas as pd
import ast

# 示例DataFrame
df = pd.DataFrame({
    'location': ['[{"Name":"北京"}, {"Name":"上海"}]', '[{"Name":"广州"}]']
})

# 第一步:解析字符串为列表字典
df['location'] = df['location'].apply(ast.literal_eval)

# 第二步:提取Name并生成逗号分隔字符串,生成新列
df['location_names'] = df['location'].apply(
    lambda x: ', '.join([d.get('Name', '') for d in x])
)

异常处理(可选)

如果location列里存在格式不合法的字符串(比如解析失败),可以加try-except避免报错中断:

def extract_names(loc_data):
    try:
        # 如果是字符串先解析,已经是列表的话直接用
        loc_list = ast.literal_eval(loc_data) if isinstance(loc_data, str) else loc_data
        # 过滤非字典元素,避免额外报错
        return ', '.join([d.get('Name', '') for d in loc_list if isinstance(d, dict)])
    except Exception:
        return ''

df['location_names'] = df['location'].apply(extract_names)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:00:56