如何解析Pandas DataFrame列中字符串格式列表并提取指定name字段值
解决方案
核心逻辑是通过apply将你已验证的单行提取逻辑批量作用到整列,同时增加异常兼容避免报错。
完整可运行代码
import pandas as pd import ast # 模拟DataFrame df = pd.DataFrame({'org [dtype: Object]': {0: "[{'name': 'Org Lvl 1'}, {'name': 'Org Lvl 2'}, {'name': 'Org Lvl 3'}, {'name': 'Org Lvl 4'}]"}}) # 批量提取目标值 df['target_org_name'] = df['org [dtype: Object]'].astype(str).apply( lambda s: ast.literal_eval(s)[3].get('name') if isinstance(ast.literal_eval(s), list) and len(ast.literal_eval(s)) >=4 else None )
运行后df['target_org_name']即为你需要的提取结果,示例行对应值为Org Lvl 4。如果你不需要兼容异常场景,且确认所有行的org列表长度都≥4,可以简化为:
df['target_org_name'] = df['org [dtype: Object]'].astype(str).map(ast.literal_eval).str[3].str.get('name')
补充说明
- 之前调用
.str访问器报错的原因是org列的object类型中存在非字符串值,提前加astype(str)即可解决,但用split拆分的方式不稳定,如果name字段本身包含逗号会出现拆分错误,用ast.literal_eval转成原生Python结构是更可靠的方案。 - 如需省略中间生成的辅助列,可以直接将结果赋值到原org列覆盖原有值。
内容的提问来源于stack exchange,提问作者mmera
相关产品推荐
相关产品推荐

