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

pandas对outcome变量分层随机抽样报KeyError:0如何解决

代码错误原因

原代码抛出KeyError: 0由3处核心错误导致:

  • random.choices() 接收过滤后的DataFrame作为输入时,迭代DataFrame默认返回列名而非行数据,返回结果是列名组成的列表,不存在DataFrame的.index属性,调用时直接触发键错误。
  • 循环内idx.extend(selectedlist) 传入的是固定的类别名称列表,没有存入实际抽样得到的行索引,逻辑完全不符合预期。
  • 手动调用标准库random做DataFrame抽样没有利用pandas内置方法,容易出现索引对齐问题,抽样逻辑可靠性差。
正确实现代码

直接用pandas内置的sample()方法做分层抽样,不需要额外引入random库,写法简洁且结果稳定:

# 定义待抽样的类别列表、单类别抽样量
selected_list = ["Major_effect", "Minor_Effect", "Moderate Effect"]
sample_per_class = 2288

sampled_index = []
for class_name in selected_list:
    # 筛选对应类别的子集,抽样指定数量
    # 若类内总样本不足2288,添加replace=True参数开启有放回抽样即可
    class_subset = df8[df8["outcome"] == class_name]
    sampled_res = class_subset.sample(n=sample_per_class, random_state=123)
    sampled_index.extend(sampled_res.index.tolist())

# 提取抽样后的最终数据集,重置索引
df8_sampled = df8.loc[sampled_index].reset_index(drop=True)

参数说明:random_state为固定随机种子,传入任意整数可保证每次运行抽样结果一致,方便复现;不需要固定结果可以删除该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:51:24