簡體   English   中英

我怎樣才能使用數據幀使這個算法更有效?

[英]How can i make this algorithm more efficient using dataframes?

我正在嘗試獲取列的異常值(使用 IQR),一旦獲得異常值,我想將異常值在我的主要 dataframe 中設置為 null 的值,以便之后對它們進行估算。 這是我實現它的方式:

 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))




這 2 個 for 循環使程序真的很慢,他們是實現這個的更好方法嗎?

“remove_outliers_IQR”的function代碼:

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

您可以利用您已在 function 中使用的邏輯索引。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM