我有一个数据集,其中有体重和高度,我想使用相同的代码删除两列中的所有异常值,如下所示(我的变量是 float640:
for c in df.columns[0:2]:
Q1= np.percentile(df[c],25)
Q3= np.percentile(df[c],75)
IQR= Q3-Q1
upper= Q3+ 1.5*IQR
lower= Q1-1.5*IQR
upper_array=np.where(df[c]>=upper)[0]
lower_array=np.where(df[c]<=lower)[0]
df[c].drop(index=upper_array,inplace=True)
df[c].drop(index=lower_array, inplace=True)
初始数据形状为(3000,3),但运行代码后,形状没有改变。但事实上,我的数据中存在异常值
我尝试修改掉落方法(由AI建议):
outlier_indices= np.concatenate((upper_array,lower_array))
df[c].drop(index=outlier_indices, inplace=True)
和
df= df[~upper_array]
df= df[~lower_array]
但是没有效果。
我的代码有什么问题吗?
问题是您要从列的“副本”中删除索引。您应该从完整数据框中删除它们:
df.drop(index=upper_array,inplace=True)
请注意,这也会删除两列中只有一列具有异常值的行。