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

Pandas DataFrame匹配指定列删除特定值行的报错问题求解

Pandas 按列值删除行通用实现

原代码错误原因

  1. pddf.filter(regex=x) 报错是因为regex参数要求传入正则表达式字符串,不能直接传入整数索引列表,因此触发不可哈希错误
  2. 未定义变量Phosphorylation,你需要匹配的目标值应为80
  3. pddf.drop() 操作默认不修改原DataFrame,需要赋值给新变量或者添加inplace=True参数才会生效

需求1&2 代码实现

query = 'KGTLPK'
AA = 'K'
# 一步得到目标字符的位置列表
target_cols = [pos for pos, char in enumerate(query) if char == AA]

target_value = 80
# 构造掩码:所有目标列同时等于80的行标记为True
delete_mask = (pddf[target_cols] == target_value).all(axis=1)
# 取反保留不符合删除条件的行,直接更新原变量
pddf = pddf[~delete_mask]

通用工具函数

封装后可以快速实现各类按列值删行的需求:

def drop_rows_by_col_value(df, target_cols, target_value, match_all=True):
    # 兼容单个列输入的场景
    if not isinstance(target_cols, list):
        target_cols = [target_cols]
    # 生成匹配掩码
    if match_all:
        # 所有指定列都等于目标值才删除
        mask = (df[target_cols] == target_value).all(axis=1)
    else:
        # 任意一列等于目标值就删除
        mask = (df[target_cols] == target_value).any(axis=1)
    # 返回过滤后的结果
    return df[~mask]

调用示例

  • 删除第0、5列同时等于80的行
    pddf = drop_rows_by_col_value(pddf, target_cols=[0,5], target_value=80)
    
  • 删除第3列所有值为42的行
    pddf = drop_rows_by_col_value(pddf, target_cols=3, target_value=42)
    
  • 替换你之前硬编码的删除第0列不等于16的行逻辑
    pddf = pddf[pddf[0] == 16]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:45:04