实际的数据帧是巨大的,所以我展示了一个很小的数据帧,这样您就可以使用您的输出进行复制.
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)