将含PASS/FAIL字符串列表的Pandas Series转换为数字
处理字符串形式列表的Pandas Series转数字类型
需求说明
现有一个Pandas Series,元素是字符串形式存储的列表,列表内只有PASS或FAIL值。需要按规则转换为数字:
- 列表中至少有一个
PASS→ 对应值为1 - 列表全为
FAIL→ 对应值为0
示例输入:result列值分别为 "['PASS','FAIL']"、"['PASS','FAIL','PASS','FAIL']"、"['FAIL','FAIL']"
预期输出:1、1、0
解决方案
核心分两步:先把字符串形式的列表解析为实际的Python列表,再判断列表中是否存在PASS。
步骤1:导入依赖库
import pandas as pd import ast
用
ast.literal_eval解析字符串列表,比直接用eval更安全,能避免恶意代码执行风险。
步骤2:构造示例数据(可替换为你的实际数据)
data = {'result': ["['PASS','FAIL']", "['PASS','FAIL','PASS','FAIL']", "['FAIL','FAIL']"]} df = pd.DataFrame(data)
步骤3:转换处理
可以分成两步清晰处理,也可以合并成一步:
方式1:分步处理(便于调试)
# 1. 将字符串转成实际列表 df['result_list'] = df['result'].apply(ast.literal_eval) # 2. 判断是否含PASS,生成数字列 df['result_num'] = df['result_list'].apply(lambda x: 1 if 'PASS' in x else 0)
方式2:一步到位(精简代码)
df['result_num'] = df['result'].apply(lambda s: 1 if 'PASS' in ast.literal_eval(s) else 0)
最终结果
处理后df['result_num']即为目标数字Series,输出如下:
0 1 1 1 2 0 Name: result_num, dtype: int64
内容的提问来源于stack exchange,提问作者Swetha
相关产品推荐
相关产品推荐

