Pandas遍历含Compliance关键词多列 按规则对比筛选目标列
Pandas通用Excel合规列筛选实现方案
原代码问题修正
- 存在语法错误:
df merged变量名带空格、字符串替换时引号不匹配 - 逻辑顺序问题:提前裁剪掉
Requirement?列后再插入,易引发索引不匹配问题 - 筛选逻辑缺失:没有实现「Requirement?为True时合规列为空则保留列」的判断逻辑
可直接复用的实现代码
import pandas as pd import numpy as np # 基于原始合并后的DataFrame做副本,避免修改源数据 df6 = df_merged.copy() # 统一空值标记:将nan、None、字符串nan、空字符串统一标记为'Empty',和业务判定规则对齐 df6 = df6.replace([np.nan, None, 'nan', ''], 'Empty') # 固定基准列名,自动匹配所有名称带Compliance关键词的列,适配不同Excel列结构 requirement_col = 'Requirement?' compliance_cols = df6.columns[df6.columns.str.contains("Compliance", na=False)].tolist() # 逐列校验是否符合保留规则 keep_cols = [requirement_col] for col in compliance_cols: # 规则:存在任意一行满足「Requirement?为True 且 当前合规列取值为Empty」,则保留该列 if ((df6[requirement_col] == True) & (df6[col] == 'Empty')).any(): keep_cols.append(col) # 生成最终结果集 final_result = df6[keep_cols]
适配说明
- 无硬编码列名,只要Excel文件包含
Requirement?列、合规列名带Compliance关键词即可自动识别,兼容不同列顺序、不同数量合规列的文件结构 - 如果需要严格匹配
Compliance Status全称列,可将列匹配逻辑替换为df6.columns.str.contains(r'\bCompliance Status\b', na=False) - 空值判定规则可根据实际业务调整
replace方法内的匹配值列表
效果验证
针对提供的测试数据:
Requirement? A-Compliance Status B-Compliance Status True Empty Yes
代码执行后会自动过滤不符合规则的B列,输出和预期一致:
Requirement? A-Compliance Status True Empty
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

