如何基于行值删除Pandas DataFrame中的行(熵离散化场景)
熵离散化代码问题修复
删除阈值对应行的实现方法
你原有代码写法错误的核心原因有三个:
drop是可调用方法,需要用括号传递参数而非方括号- Pandas方法默认返回新对象,不会修改原变量,操作后需要重新赋值给原变量
s.iloc[0]是完整的行数据对象,不是行索引,不能直接作为drop的入参
正确实现方式
如果需要删除所有A列值等于当前阈值的行,直接用布尔索引过滤即可,这是最稳定的实现:
s = s[s['A'] != threshold]
如果你只需要删除当前取阈值的第一行数据,可以按行索引删除:
s = s.drop(s.index[0])
现有代码其他注意事项
你当前的代码还有几处明显逻辑问题,后续运行会报错:
- 你用字典
I存储每次计算的信息增益和阈值,每次循环都会覆盖原有值,后续计算最大信息增益时无法取到所有历史阈值的增益结果,建议将I改为列表,每次循环append{'informationGain':informationGain,'threshold':threshold}结构 - 循环结束后调用
np.amax(informationGain)时,informationGain是循环内的局部变量,此时已经不存在,你需要从I列表中提取所有信息增益值再求最大值 - 你调用
bestPartition时传入了未定义的minInformationGain变量,且bestPartition函数没有返回分箱后的数据集,最后无法得到你想要的分箱结果
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

