如何在train_test_split后删除测试集中MFD>1的指定行
解决数据集拆分后删除特定行的索引问题
嘿,我懂你这头疼的问题——用train_test_split拆分完数据集后,测试集的索引全被打乱了,再用原来的索引去删行肯定会触发越界错误。咱们直接基于拆分后的测试集本身来定位要删除的行就行。
假设你的X_test中包含MFD这个特征列(如果实际列名不同,替换成真实名称即可),你可以这样获取符合MFD>1条件的新索引:
# 先生成布尔掩码,标记所有MFD>1的行 mask = X_test['MFD'] > 1 # 提取这些行对应的索引 mfd_drop_rows = X_test[mask].index
或者更简洁的一步写法:
mfd_drop_rows = X_test[X_test['MFD'] > 1].index
拿到这些索引后,就可以同步清理X_test和y_test了:
# 删除X_test中符合条件的行 X_test_clean = X_test.drop(mfd_drop_rows) # 同步删除y_test中对应索引的行(两者索引完全对齐) y_test_clean = y_test.drop(mfd_drop_rows)
更高效的简化方案
其实你甚至不用单独提取索引,直接用布尔掩码的取反来保留MFD<=1的行,代码会更简洁直观:
# 直接筛选出MFD<=1的行,自动保留对应索引 X_test_clean = X_test[X_test['MFD'] <= 1] # 利用X_test的索引同步筛选y_test,确保两者行完全对应 y_test_clean = y_test.loc[X_test_clean.index]
核心逻辑就是:拆分后的X_test和y_test共享完全一致的索引体系,所以只要在X_test里定位到目标行,用相同的索引操作y_test就能完成同步清理,完全不用依赖原数据集的旧索引。
内容的提问来源于stack exchange,提问作者Florian Notar
相关产品推荐
相关产品推荐

