使用np.any()捕获数据框上下异常值时遇类型错误的问题
解决提取上下限异常值的TypeError问题
我来帮你拆解下这个错误的原因,以及怎么正确实现需求~
错误根源
你这里的问题出在np.any()的用法上。np.any()的第二个参数是用来指定**判断的轴(axis)**的(比如axis=0表示按列判断,axis=1按行),而不是用来传入第二个条件的。你把sepal_outliers > 4.05这个布尔数组直接丢给np.any()当第二个参数,它会把这个数组当成整数标量的轴索引来处理,自然就抛出了TypeError: only integer scalar arrays can be converted to a scalar index的错误。
正确实现方式
要同时获取上下限的异常值,你只需要用**逻辑或运算符(|)**把两个条件合并成一个布尔掩码,然后直接用这个掩码筛选数据框就行,不需要用到np.any()(除非你要对多列进行批量判断,但这里你已经提取了单列数据)。
示例代码如下:
import numpy as np import pandas as pd # 假设x是你的输入数组,df是对应的数据框 sepal_outliers = x[:,1] # 用|合并两个条件,注意每个条件要加括号避免运算优先级问题 outliers_mask = (sepal_outliers < 2.05) | (sepal_outliers > 4.05) # 筛选出异常值对应的行 df_outliers = df[outliers_mask]
如果你的sepal_outliers本身就是数据框中的一列,还可以更简洁:
# 直接基于数据框列构建掩码 outliers_mask = (df['sepal_column_name'] < 2.05) | (df['sepal_column_name'] > 4.05) df_outliers = df[outliers_mask]
内容的提问来源于stack exchange,提问作者Josh Bennett
相关产品推荐
相关产品推荐

