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

DataFrame列值匹配提取问题:NA场景未返回预期空值求助

问题描述

现有如下结构的两列DataFrame:

ExtractionActual
[1_CHECK_90,2_SAVE_43,3_GO_56]2_SAVE
[1_FIN_54,2_CHECK_22]1_FIN_54
[1_L_32,2_Y_79,4_X_66]2_Y_79
[5_T_88]NA

需求是:通过匹配Extraction列元素左侧的数字前缀,从Extraction中取出Actual列对应的取值。

尝试了以下函数实现,多数场景正常,但当Actual值为NA时,无法返回空列表,需要修复:

def extract_actual(row):
    try:
        a =[]
        for i in row['Extraction']:
            for j in i:
                for k in j.split("_"): 
                    # print(k)
                    for l in row['Actual']:
                        if k == l:
                            a.append(j)
        return a
    except: 
        a =[]
        return a
解决方案

问题出在哪?

原函数的try-except范围太广,而且当Actual是NA时,代码会继续执行循环对比逻辑,不会主动返回空列表;同时嵌套循环冗余,逻辑绕弯,容易出问题。

修改后的函数

直接先处理NA场景,再做匹配,逻辑更清晰:

def extract_actual(row):
    actual_val = row['Actual']
    # 优先处理Actual为NA的情况,直接返回空列表
    if actual_val == 'NA':
        return []
    # 提取Actual的数字前缀(不管Actual是"2_SAVE"还是"1_FIN_54"格式)
    actual_prefix = actual_val.split("_")[0]
    matched_items = []
    # 遍历Extraction里的每个元素,匹配前缀数字
    for item in row['Extraction']:
        item_prefix = item.split("_")[0]
        if item_prefix == actual_prefix:
            matched_items.append(item)
    return matched_items

逻辑说明

  1. 先判断Actual是否为NA,是则直接返回空列表,解决核心问题。
  2. 提取Actual值的数字前缀(比如从2_SAVE里拿到2,从1_FIN_54里拿到1)。
  3. 遍历Extraction的每个元素,提取对应前缀,和Actual的前缀匹配,匹配成功就加入结果列表。
  4. 去掉冗余的多层嵌套循环,逻辑更直观,也避免了不必要的异常捕获。

测试效果

用原DataFrame测试,结果符合预期:

  • 第一行返回 ['2_SAVE_43']
  • 第二行返回 ['1_FIN_54']
  • 第三行返回 ['2_Y_79']
  • 第四行(Actual为NA)返回 []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:05:25