A sample dataframe with 8 columns

实际的数据帧是巨大的,所以我展示了一个很小的数据帧,这样您就可以使用您的输出进行复制.

data = {'X1': [3,5,8,3,5,19,5],
        'X2': [2,7,9,1,14,2,10],
        'X3': [1,8,23,14,4,9,5],
        'X4': [5,3,1,6,9,23,12]}

df = pd.DataFrame.from_dict(data)

我正在try 删除所有功能的离群值.因此,我应用了Apply函数,但它给了我一个错误.所以请帮帮忙.其次,我还想知道是否可以只使用for循环来执行它.

def remove(df):
    for i in df:
        Q1 = df[i].quantile(0.25)
        Q3 = df[i].quantile(0.75)
        IQR = Q3 - Q1
        lower = (Q1 - 1.5*IQR)
        upper = (Q3 + 1.5*IQR)
         
        upper_array = np.where(df[i] >= upper)[0]
        lower_array = np.where(df[i] <= lower)[0]
    
   df.drop(index=upper_array, inplace=True)
   df.drop(index=lower_array, inplace=True)

   return df



df = df.apply(remove,axis=1)
df.head()

第二,

我如何使用简单的for循环来实现这一点?我试了一些代码,但我不能通过.

lower = []
upper = []
for i in df:
    Q1 = df[i].quantile(0.25)
    Q3 = df[i].quantile(0.75)
    IQR = Q3 - Q1
    lower.append(Q1 - 1.5*IQR)
    upper.append(Q3 + 1.5*IQR)
    
for i in df:
        upper_array = np.where(df[i] >= upper)[0]
        lower_array = np.where(df[i] <= lower)[0]

df.drop(index=upper_array, inplace=True)
df.drop(index=lower_array, inplace=True)

推荐答案

您不应该使用for循环来删除异常值,您可以将方法矢量化.

假设此示例输入:

np.random.seed(0)
df = (pd.DataFrame(np.random.normal(size=(100, 8)))
        .rename(columns=lambda x: f'X{x+1}')
      )

计算quantile,然后计算IQR,并用lt/gt识别离群值.然后使用any标记具有至少一个离群值的行,以使用boolean indexing过滤它们:

Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1

outlier = df.lt(Q1 - 1.5*IQR) | df.gt(Q3 + 1.5*IQR)

out = df[~outlier.any(axis=1)]

输入数据集的图形:

enter image description here

过滤离群值后的数据集(显示为灰点):

enter image description here

Python相关问答推荐

修剪Python框架中的尾随NaN值

判断两极中N(N 2)列水平是否相等

如何将 map 数组组合到pyspark中每列的单个 map 中

使用Python Great Expectations和python-oracledb

如何将带有逗号分隔的数字的字符串解析为int Array?

更改Seaborn条形图中的x轴日期时间限制

如何修复使用turtle和tkinter制作的绘画应用程序的撤销功能

Python中是否有方法从公共域检索搜索结果

将HLS纳入媒体包

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

Select 用a和i标签包裹的复选框?

acme错误-Veritas错误:模块收件箱没有属性linear_util'

查找两极rame中组之间的所有差异

如何访问所有文件,例如环境变量

删除字符串中第一次出现单词后的所有内容

OR—Tools CP SAT条件约束

实现自定义QWidgets作为QTimeEdit的弹出窗口

创建可序列化数据模型的最佳方法

实现神经网络代码时的TypeError

Pandas GroupBy可以分成两个盒子吗?