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

为何np.random.choice会误删数据集不该删除的行?

问题排查:误删非目标类别数据的原因分析

问题背景

处理名为gen的数据集,churn?列是0/1的二元整数类型,初始统计:

  • 值0:1125行
  • 值1:154行

为平衡数据集,尝试随机删除200行值为0的数据,代码如下:

# 筛选churn?为0的行,随机选取200行索引
rows_to_remove = np.random.choice(gen[gen['churn?']==0].index, size=200, replace=False)
# 删除选中的行得到新数据集
gen_new = gen.drop(rows_to_remove)

执行后结果异常:

  • 值0的行正确剩余925行
  • 值1的行仅剩130行,莫名丢失24行

可能的原因及排查方案

  • 索引重复导致误删:如果数据集的索引不是唯一值,drop方法会删除所有匹配该索引的行。比如某条值为1的行和被选中的0值行索引相同,执行删除时会被一并删掉。
    排查:运行gen.index.is_unique,返回False就说明存在重复索引。解决:先重置索引gen = gen.reset_index(drop=True),再执行删除逻辑。

  • 筛选逻辑或变量污染:检查是否有其他代码修改了gen或rows_to_remove。比如生成rows_to_remove后,立刻执行gen.loc[rows_to_remove, 'churn?'].value_counts(),确认选中的全是0值行。如果这里出现1,可能是churn?列数据类型不对(比如是字符串'0'而非整数0,导致筛选条件不匹配),或者列名写错了。

  • 数据集实际行数不符:确认len(gen[gen['churn?']==0])确实是1125,避免筛选条件写错导致选中了部分1值行的索引。

  • 旧版本Pandas的bug:极少数旧版Pandas(低于1.0)处理非唯一索引的drop时可能有异常,运行pd.__version__检查版本,必要时升级重试。

内容的提问来源于stack exchange,提问作者tessema_t

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:45:09