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

如何在Pandas/Python中提取字符串内字典的指定值?

解决方法

问题出在批量循环时,你的Computed Data列里可能存在格式不合法的字符串(比如引号不匹配、缺失括号、空值或特殊字符),导致ast.literal_eval()解析失败抛出ValueError。单个测试时你刚好选到了合法的条目,所以没报错。

1. 安全解析函数 + 批量处理

用apply配合带异常捕获的解析函数,既可以批量处理,又能跳过无效条目,避免整个流程中断:

import ast
import pandas as pd

def extract_activable(s):
    try:
        # 把字符串解析为字典
        data_dict = ast.literal_eval(s)
        # 逐层提取目标值,不存在则返回空值
        return data_dict.get("Status", {}).get("activable", pd.NA)
    except (ValueError, SyntaxError, TypeError):
        # 解析失败时返回空值
        return pd.NA

# 应用到DataFrame生成新列
df["Activable"] = df["Computed Data"].apply(extract_activable)

2. 定位无效数据

如果需要找出哪些行导致了错误,可筛选出解析失败的条目排查:

# 筛选出非空但解析失败的行
invalid_entries = df[df["Activable"].isna() & df["Computed Data"].notna()]
print("无效的字符串条目:")
print(invalid_entries["Computed Data"])

常见的无效情况包括:

  • 字符串里的单/双引号不匹配
  • 字典格式错误(比如少了}或者逗号)
  • 单元格是空字符串或非字典格式的文本

3. 可选:预处理清洗数据

如果无效条目是因为格式小问题(比如单引号转双引号),可以先做简单清洗:

# 示例:把单引号替换为双引号(仅当原字符串是单引号包裹的字典时适用)
df["Cleaned Data"] = df["Computed Data"].str.replace("'", '"')
# 再用清洗后的数据解析
df["Activable"] = df["Cleaned Data"].apply(extract_activable)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:20:35