使用中位数替换avg_glucose_level异常值失败的技术问询
解决异常值替换中位数失效的问题
你的代码仅处理了大于上界的异常值,遗漏了小于下界的部分;同时如果data是Pandas数据框,直接赋值可能因链式索引导致修改未真正生效,以下是修正方案:
问题分析
- 原代码仅通过
np.where处理data["avg_glucose_level"] > upper的情况,完全没覆盖data["avg_glucose_level"] < lower的异常值 - 若
data为Pandas DataFrame,直接赋值data["avg_glucose_level"]可能存在链式索引问题,导致修改未写入原数据
修正后的代码
# 绘制原始箱线图(可选) data.boxplot("avg_glucose_level") # 计算四分位数与IQR q1 = np.percentile(data["avg_glucose_level"], 25) q2 = np.percentile(data["avg_glucose_level"], 50) q3 = np.percentile(data["avg_glucose_level"], 75) iqr = q3 - q1 # 计算上下界 upper = q3 + 1.5 * iqr lower = q1 - 1.5 * iqr # 同时处理上下界异常值,用.loc确保修改生效 data.loc[:, "avg_glucose_level"] = np.where( (data["avg_glucose_level"] > upper) | (data["avg_glucose_level"] < lower), q2, data["avg_glucose_level"] ) # 绘制处理后的箱线图 data.boxplot(column="avg_glucose_level")
关键修改点
- 用逻辑或
|同时判断大于上界和小于下界的异常值 - 使用
data.loc[:, "avg_glucose_level"]赋值,规避Pandas链式索引引发的修改不生效问题 - 保留原有的四分位数计算逻辑,确保异常值判断标准一致
内容的提问来源于stack exchange,提问作者Jahnavi Ravi
相关产品推荐
相关产品推荐

