如何在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
相关产品推荐
相关产品推荐

