我正在嘗試使用 IQR 方法洗掉例外值。但是,我的 df 的形狀保持不變。
這是代碼:
def IQR_outliers(df):
Q1=df.quantile(0.25)
Q3=df.quantile(0.75)
IQR=Q3-Q1
df=df[~((df<(Q1-1.5*IQR)) | (df>(Q3 1.5*IQR)))]
return df
IQR_outliers(df['Distance'])
IQR_outliers(df['Price'])
uj5u.com熱心網友回復:
您的函式會考慮傳遞的整個物件,但每次使用它時只傳遞一個系列。您也沒有捕獲輸出。所有這些東西疊加在一起,使您的問題變得非常復雜。
所以這就是我會做的:
column為您的函式添加一個引數- 修改函式以僅在從整個資料框中選擇行時考慮該列
- 將資料幀通過管道傳輸到該函式幾次
所以那是:
def IQR_outliers(df, column):
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
df = df.loc[lambda df: ~((df[column] < (Q1 - 1.5 * IQR)) | (df[column] > (Q3 1.5 * IQR)))]
return df
revised_df = df.pipe(IQR_outliers, 'Distance').pipe(IQR_outliers, 'Price')
請注意,按照您演示的方式,您很可能會洗掉距離為例外值的行,即使價格不是。如果您不想這樣做,則需要堆疊資料幀,將此函式應用于 groupby 操作,然后可選擇取消堆疊資料幀
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400508.html
上一篇:是否可以將FastAPI實體掛載到Flask應用程式上?
下一篇:列名稱與預期的行值不匹配
