首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何使这个算法更有效地使用数据文件?

我如何使这个算法更有效地使用数据文件?
EN

Stack Overflow用户
提问于 2022-03-24 01:17:31
回答 1查看 47关注 0票数 0

我试图获得列的离群值(使用IQR),一旦得到异常值,我想将主数据中异常值的值设置为null,以便事后对它们进行计算。我就是这样实现的:

代码语言:javascript
复制
 df_outliers_detected = detect_outliers_IQR(df['Outliers'])
 df_outliers_detected = pd.DataFrame(df_outliers_detected)
 print(df_outliers_detected)

 for i in range(len(df)):
  for j in range(len df_outliers_detected)):
     if(df.loc[i, "Outliers"] ==  df_outliers_detected.iloc[j,0]):
       df.loc[i,'Outliers'] = None
                    
 print(df['Outliers'].head(100))

这两个for循环使程序非常慢,它们是实现这个的更好的方法吗?

“remove_outliers_IQR”的函数代码:

代码语言:javascript
复制
def detect_outliers_IQR(df):

    Q1 = df.quantile(0.25)
    Q3 = df.quantile(0.75)
    IQR = Q3 - Q1
    
    print(df)
    print("\n")
    df_outlier = df[((df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR)))]
    print(len(df_outlier))
    return df_outlier
EN

回答 1

Stack Overflow用户

发布于 2022-03-24 01:42:00

您可以利用您在函数中已经使用的逻辑索引。

代码语言:javascript
复制
def detect_outliers_IQR(df_input):
    df = df_input.copy()
    Q1 = df.quantile(0.25)
    Q3 = df.quantile(0.75)
    IQR = Q3 - Q1
    df_outlier = (df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR))
    df[df_outlier] = None
    return df

# replace outliers
df_outliers_detected = detect_outliers_IQR(df['Outliers'])
print(df_outliers_detected)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71595945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档