如何从表格列的类字典列表格式字符串中提取label=1对应的prob数值
提取label为1对应prob数值的实现方案
核心思路有两种:一是将类JSON字符串转换为合法结构后解析取值,二是用正则直接匹配目标值,适配不同使用场景的操作方法如下:
方法1:Python解析取值(最稳妥,无匹配误差)
import json # 替换为你的原始字符串/表格字段取值 raw_str = "[{'label': 1, 'prob': 0.5001602182558444}, {'label': 0, 'prob': 0.49983978174415555}]" # 替换单引号为双引号,转为合法JSON格式 json_str = raw_str.replace("'", "\"") # 解析为列表对象 data_list = json.loads(json_str) # 匹配label为1的项,取出prob值 target_prob = next(item['prob'] for item in data_list if item['label'] == 1) print(target_prob)
运行输出:0.5001602182558444
方法2:正则匹配(适合快速提取场景)
直接通过正则定位label为1的分组后的prob数值,不需要解析完整结构,适配空格不统一的鲁棒写法如下:
import re raw_str = "[{'label': 1, 'prob': 0.5001602182558444}, {'label': 0, 'prob': 0.49983978174415555}]" # 正则适配键值之间的任意空格,避免格式不统一导致匹配失败 match_res = re.search(r"'label'\s*:\s*1\s*,\s*'prob'\s*:\s*(\d+\.\d+)", raw_str) if match_res: target_prob = float(match_res.group(1)) print(target_prob)
方法3:SQL场景直接提取(适配表格字段批量处理)
如果是处理数据库/数仓表中的该列数据,直接用SQL自带的正则提取函数即可,以Hive/Spark SQL为例:
select regexp_extract(目标列名, "'label'\\s*:\\s*1\\s*,\\s*'prob'\\s*:\\s*(\\d+\\.\\d+)", 1) as label1_prob from 你的表名;
内容的提问来源于stack exchange,提问作者Ziggy
相关产品推荐
相关产品推荐

