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

使用Pandas基于两列AND条件拆分数据时遇到问题求助

问题描述

我正在清理电子表格,现有包含Severity、Fixable、CVE、Date列的DataFrame(vulns_new_or_changed),希望将其中Severity为LOW且Fixable为FALSE的行拆分到lowAndUnfixable,剩余行保留在原DataFrame。

编写的代码如下:

mask = ( vulns_new_or_changed['Fixable'].isin(['FALSE']) ) & ( vulns_new_or_changed['Severity'].isin(['LOW']) )         
lowAndUnfixable = vulns_new_or_changed.drop(vulns_new_or_changed[~mask].index)
vulns_new_or_changed.drop(vulns_new_or_changed[mask].index, inplace = True)

示例数据:

Severity, Fixable, CVE, Date
HIGH, TRUE, XXXXXX, Jan 2023
LOW, FALSE, XXXXXX, Mar 2023
LOW, TRUE, XXXXXX, MAY 2023

预期lowAndUnfixable的结果为:

LOW, FALSE, XXXXXX, Mar 2023

但实际执行时,使用[~mask]会得到0行,使用[mask]会选中所有行,如何解决?


问题原因

核心问题是数据类型或列值格式不匹配:

  1. 若Fixable列被Pandas自动解析为布尔类型(值为True/False),但你用字符串'FALSE'匹配,会导致匹配逻辑完全错误——布尔值和字符串无法匹配,最终导致mask结果不符合预期。
  2. 若Fixable/Severity是字符串类型,但存在大小写差异(如'false')、前后空格(如' FALSE '),也会导致isin匹配失败,进而让mask结果异常。

解决方案

步骤1:排查实际列值

先查看列的唯一值,确认数据格式:

print("Fixable列唯一值:", vulns_new_or_changed['Fixable'].unique())
print("Severity列唯一值:", vulns_new_or_changed['Severity'].unique())

步骤2:根据实际情况调整匹配逻辑

情况A:Fixable是布尔类型

直接用布尔值匹配:

mask = (vulns_new_or_changed['Fixable'] == False) & (vulns_new_or_changed['Severity'] == 'LOW')

情况B:Fixable是字符串类型(存在格式问题)

先清洗列值,统一格式后再匹配:

# 去除前后空格、统一转为大写
vulns_new_or_changed['Fixable'] = vulns_new_or_changed['Fixable'].str.strip().str.upper()
vulns_new_or_changed['Severity'] = vulns_new_or_changed['Severity'].str.strip().str.upper()
# 生成匹配掩码
mask = (vulns_new_or_changed['Fixable'] == 'FALSE') & (vulns_new_or_changed['Severity'] == 'LOW')

步骤3:简化拆分代码

用直接筛选的方式替代drop,更直观且不易出错:

# 筛选目标行到新DataFrame
lowAndUnfixable = vulns_new_or_changed[mask].copy()
# 从原DataFrame移除目标行(非inplace方式,更安全)
vulns_new_or_changed = vulns_new_or_changed[~mask].copy()

# 若要使用inplace方式:
# vulns_new_or_changed.drop(vulns_new_or_changed[mask].index, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:32