You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas的sample和drop拆分数据集未达预期,求原因

问题原因分析与解决办法
  • 核心原因:数据集索引存在重复值
    你的代码逻辑本身没问题,但train_df的索引不是唯一的。当调用drop(index=I1.index)时,Pandas会删除所有索引匹配I1中索引值的行,而不是只删除I1选取的那2000行。如果原始数据里有大量重复索引,就会出现删除后剩余行数远少于预期的情况。

  • 验证方法
    执行以下代码检查索引唯一性:

    print(train_df.index.is_unique)  # 输出False说明存在重复索引
    print(train_df.index.duplicated().sum())  # 查看重复索引的总数量
    
  • 解决办法
    有两种常用方案:

    1. 重置索引后再拆分
      train_df = train_df.reset_index(drop=True)
      I1 = train_df.sample(frac=0.5, random_state=opts.seed)
      I2 = train_df.drop(index=I1.index)
      
    2. 用布尔掩码拆分
      先生成随机掩码,彻底避开索引重复的影响:
      import numpy as np
      mask = np.random.RandomState(opts.seed).choice([True, False], size=len(train_df), p=[0.5, 0.5])
      I1 = train_df[mask]
      I2 = train_df[~mask]
      

内容的提问来源于stack exchange,提问作者Dr. Prof. Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:00:47