如何同时移除X_train与y_train中索引匹配的异常值对应行
最简实现方案
核心逻辑是生成y_train的保留行布尔掩码,用同一掩码同时过滤两个对象即可,pandas会自动按索引对齐行,无需手动匹配索引。
步骤1:生成保留行掩码(True对应要保留的正常行,False对应要删除的异常值行)
你可以根据自己的异常值判定规则生成掩码,下面给出两种常用场景的示例:
- 3σ原则异常值判定示例:
mean_val = y_train.mean() std_val = y_train.std() mask = (y_train >= mean_val - 3 * std_val) & (y_train <= mean_val + 3 * std_val)
- 四分位距IQR异常值判定示例:
q1 = y_train.quantile(0.25) q3 = y_train.quantile(0.75) iqr = q3 - q1 mask = (y_train >= q1 - 1.5 * iqr) & (y_train <= q3 + 1.5 * iqr)
步骤2:同步过滤X_train和y_train
# 生成过滤后的新数据集,不修改原数据 X_train_clean = X_train[mask] y_train_clean = y_train[mask] # 如果需要直接覆盖原有变量,可替换为: # X_train = X_train[mask] # y_train = y_train[mask]
注:只要拆分训练集时X_train和y_train的行索引是对应关系(标准train_test_split拆分默认保持索引对应),该方法就可以100%保证过滤后两份数据的行对应关系不会出错。
内容的提问来源于stack exchange,提问作者user15963626
相关产品推荐
相关产品推荐

