Pandas用IQR移除DataFrame离群值时报广播形状不匹配错误如何解决
问题解决方法
错误原因
- 小数点符号错误:代码中
1,5是Python元组语法,实际代表元组(1, 5)而非数值1.5,导致上下限计算结果为二元组,和长度为65536的列向量做比较时无法匹配形状,触发广播错误。 - 变量名不匹配:上下限定义时用的变量名是
Lsup、Linf,后续条件判断中错误使用了未定义的upper_bound、lower_bound。 - 逻辑运算符错误:Pandas布尔序列的按位或运算不能用Python原生的
or,需要用|运算符,且两侧的判断条件必须用括号包裹避免优先级错误。 - 内置关键字覆盖:使用
list作为变量名会覆盖Python内置的列表类型,属于不规范写法,易引发后续其他错误。
修正后代码
离群值索引提取函数
def outliers(dataset, Tag): Q1 = dataset[Tag].quantile(0.25) Q3 = dataset[Tag].quantile(0.75) IQR = Q3 - Q1 Lsup = Q3 + 1.5 * IQR Linf = Q1 - 1.5 * IQR out_index = dataset.index[(dataset[Tag] > Lsup) | (dataset[Tag] < Linf)] return out_index
提取离群值索引
index_list = [] for col in ['L4553', 'F5432']: index_list.extend(outliers(df, col)) # 对索引去重,避免同一行多列同时为离群值时重复添加 index_list = list(set(index_list))
移除离群值得到清洗后数据
df_clean = df.drop(index=index_list)
内容的提问来源于stack exchange,提问作者Renan Augusto Marson
相关产品推荐
相关产品推荐

