使用np.random.choice抽样后数据出现重复值,求问题排查
问题原因与解决方案
你的随机抽样代码之所以会产生重复值,核心问题出在np.random.choice的默认行为上:它默认采用有放回抽样(参数replace=True),这就意味着同一个行索引可能被多次选中,导致data_T0_random里出现重复的行记录。当你把它和data_T1合并后,整个data数据集自然就存在重复值,所以执行drop_duplicates()后数据长度会减少。
修正方法有两种,根据你的数据量选择:
无放回抽样(推荐,当
len(data_T0) >= 10000时)
给np.random.choice添加replace=False参数,确保每个样本只被抽取一次:data_T0_random = data_T0.loc[np.random.choice(data_T0.index, 10000, replace=False)]适配数据量的安全抽样
如果data_T0的总行数不足10000,无放回抽样会直接报错。这时候可以先取实际数据量和目标抽样量的最小值,再进行无放回抽样:target_sample = 10000 actual_sample = min(target_sample, len(data_T0)) data_T0_random = data_T0.loc[np.random.choice(data_T0.index, actual_sample, replace=False)]
更简洁的替代方案:用Pandas原生的sample()方法
Pandas自带的sample()方法专门为数据框抽样设计,默认就是无放回抽样,还能自动处理数据量不足的情况(如果数据量小于目标抽样数,会直接返回全部数据),代码更简洁:
data_T0_random = data_T0.sample(n=10000) # 若需要固定抽样结果(方便复现),可以添加random_state参数 # data_T0_random = data_T0.sample(n=10000, random_state=42)
内容的提问来源于stack exchange,提问作者rk jp
相关产品推荐
相关产品推荐

