Pandas DataFrame匹配指定列删除特定值行的报错问题求解
Pandas 按列值删除行通用实现
原代码错误原因
pddf.filter(regex=x)报错是因为regex参数要求传入正则表达式字符串,不能直接传入整数索引列表,因此触发不可哈希错误- 未定义变量
Phosphorylation,你需要匹配的目标值应为80 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
相关产品推荐
相关产品推荐

