我有很多列的数据框架(大约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
我只是想知道,我下一步要做什么,以便从 Dataframe 中删除所有离群值。
如果我用这个
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)]
3条答案
按热度按时间7tofc5zh1#
您可以用途:
详细信息:
首先通过
|
创建chainboolean DataFrame
:然后使用
DataFrame.any
检查每行至少一个True
,最后通过~
反转布尔掩码:条件已更改的
invert
解决方案-<
至>=
和>
至<=
,按&
进行“与”链接,最后按all
进行过滤,以检查每行的所有True
biswetbf2#
您忘记在报价单
(['col_name'])
中填写列的名称。正确答案是:
ig9co6j13#
在使用此函数之前,请确保您的DATAFRAME在“df”变量中,因为我以这种方式构建此函数。如果您有不同的DATAFRAME变量名称,请将“df”替换为您的DATAFRAME变量名称,就是这样。
为什么我构建冗长的函数??-〉因为我想要每一个信息,如异常值,异常值的索引,这样我就可以看到它是如何与较低和较高的围栏运作。