如何在PySpark中使用IQR移除floor_area_sqm_imputed列的异常值?
PySpark 基于IQR移除指定列异常值
针对你需要移除floor_area_sqm_imputed列异常值的需求,直接用以下步骤实现:
计算目标列的四分位数与IQR
使用PySpark的approxQuantile方法获取列的25%(Q1)和75%(Q3)分位数,再计算IQR(Q3-Q1):from pyspark.sql import functions as F # 计算Q1、Q3,第三个参数0.0为精确计算,大数据量可设0.01平衡效率 q1, q3 = df.approxQuantile("floor_area_sqm_imputed", [0.25, 0.75], 0.0) iqr = q3 - q1 # 计算异常值边界:Q1-1.5*IQR 到 Q3+1.5*IQR lower_bound = q1 - 1.5 * iqr upper_bound = q3 + 1.5 * iqr过滤移除异常值
通过过滤条件保留在边界内的行,直接得到移除异常值后的DataFrame:filtered_df = df.filter( (F.col("floor_area_sqm_imputed") >= lower_bound) & (F.col("floor_area_sqm_imputed") <= upper_bound) )
说明
approxQuantile的第三个参数是相对误差,设为0.0会计算精确分位数,数据量较大时建议设为0.01,在精度和效率间取得平衡。- 示例数据中的
44.0如果落在边界外,会被自动过滤掉。
内容的提问来源于stack exchange,提问作者Wee Liang Kelven Lim
相关产品推荐
相关产品推荐

