Pandas条件判断删除列时如何保留MATNR列并添加异常处理
实现方案
直接调整列筛选判断逻辑+加drop异常参数即可,不需要改动其他原有流程。
核心修改点
- 调整待删除列的判断规则:只有*既不在规则识别出的有效列列表,也不是
MATNR*的列才会被删除,保证MATNR列无论是否被规则文件识别到都会保留 - 增加异常兼容:给drop方法传入
errors='ignore'参数,就算待删除的列不存在、或者数据里压根没有MATNR列,代码也不会抛KeyError中断运行 - 小优化:把读取到的found列表转成集合去重,规则文件里重复出现的列名不会重复判断,运行效率更高
修改后可直接运行的代码
# Import Data Quality Rules (useful attributes) rexp = re.compile('\.([A-Z]+)') found = [] with open('DataRules.csv') as f: for line in f: found.extend(rexp.findall(line)) # 有效列转集合去重 valid_columns = set(found) # Get rid of columns that are not mentioned in rules (except MATNR) # 生成待删除列列表:排除有效列+排除MATNR drop_columns = [col for col in df.columns if col not in valid_columns and col != "MATNR"] df.drop(columns=drop_columns, inplace=True, errors='ignore') # Get rid of duplicated rows df = df.drop_duplicates()
逻辑说明
如果某列在found列表里,会被保留;如果列名是MATNR,哪怕不在found列表里也会被保留;其余列全部删除。如果遇到列名不匹配、MATNR缺失的边界情况,代码会自动跳过异常,不会中断运行。
内容的提问来源于stack exchange,提问作者Owen
相关产品推荐
相关产品推荐

