我有很多列的Dataframe(大约100个特性),我想应用四分位方法,并想从数据框中删除异常值
我正在使用这个链接 stackOverflow
但问题是,上述方法中的一种工作正常
因为我正在这样努力
Q1 = stepframe.quantile(0.25)
Q3 = stepframe.quantile(0.75)
IQR = Q3 - Q1
((stepframe < (Q1 - 1.5 * IQR)) | (stepframe > (Q3 + 1.5 * IQR))).sum()
它给了我这个
((stepframe < (Q1 - 1.5 * IQR)) | (stepframe > (Q3 + 1.5 * IQR))).sum()
Out[35]:
Day 0
Col1 0
Col2 0
col3 0
Col4 0
Step_Count 1179
dtype: int64
我只是想知道,接下来我将做什么,以便从数据帧中删除所有异常值
如果我用这个
def remove_outlier(df_in, col_name):
q1 = df_in[col_name].quantile(0.25)
q3 = df_in[col_name].quantile(0.75)
iqr = q3-q1 #Interquartile range
fence_low = q1-1.5*iqr
fence_high = q3+1.5*iqr
df_out = df_in.loc[(df_in[col_name] > fence_low) & (df_in[col_name] < fence_high)]
return df_out
re_dat = remove_outlier(stepframe, stepframe.columns)
我得到了这个错误
ValueError: Cannot index with multidimensional key
在这一行
df_out = df_in.loc[(df_in[col_name] > fence_low) & (df_in[col_name] < fence_high)]
您忘了在引号
(['col_name'])
中写列的名称正确的答案是:
您可以使用:
详细信息:
首先通过
|
链创建boolean DataFrame
:然后使用^{} 检查每行至少一个
True
,最后使用~
反转布尔掩码:改变条件的} 进行最后一次筛选,检查每行的所有
invert
溶液<
到>=
和>
到<=
,按&
链进行检查,并按^{True
相关问题 更多 >
编程相关推荐