Python 基于中位数和标准偏差去除异常值

Python 基于中位数和标准偏差去除异常值,python,pandas,Python,Pandas,//fi文件 import pandas as pd df = pd.read_excel('fi.xlsx') f=df.loc[df['Description'].isin(["F32T8/SPX41/ECO2"])].sort_values(['TimeStamp']) 我想做的是去除异常值,在这种情况下,它将是187美元 ,Name,Price,Brand,Description,Sheet,TimeStamp,Date 83,"Fluorescent Linear Lamp, T8,

//fi文件

import pandas as pd
df = pd.read_excel('fi.xlsx')
f=df.loc[df['Description'].isin(["F32T8/SPX41/ECO2"])].sort_values(['TimeStamp'])
我想做的是去除异常值,在这种情况下,它将是187美元

,Name,Price,Brand,Description,Sheet,TimeStamp,Date
83,"Fluorescent Linear Lamp, T8, Cool, 4100K",$8.10,GE LIGHTING,F32T8/SPX41/ECO2,Tradional,1399352872,2014-05-06 08:07:52
86,T8 Starcoat® Ecolux® 4 ft.,$187.56,GE Lighting,F32T8/SPX41/ECO2,Tradional,1451072074,2015-12-25 21:34:34
81,"68852-Ecolux® Starcoat® Fluorescent Lamp, T8, G13 Base, 48 in., 32W, 4100K",$6.43,GE Lighting,F32T8/SPX41/ECO2,Tradional,1582483587,2020-02-23 20:46:27
82,F32T8/XL/SPX41/ECO2,$4.92,General Electric,F32T8/SPX41/ECO2,Tradional,1582483587,2020-02-23 20:46:27
84,"Fluorescent Linear Lamp, T8, Cool, 4100K",$1.75,GE LIGHTING,F32T8/SPX41/ECO2,Tradional,1582483587,2020-02-23 20:46:27
85,GE 68852 F32T8/SPX41/ECO2 - T8,$2.00,GE,F32T8/SPX41/ECO2,Tradional,1582483587,2020-02-23 20:46:27
去除这些异常值的“好”方法是什么?

是处理异常值的简单方法。它使用分位数Q1(百分位25)和Q3(百分位75)来创建值限制:

其中k是一个正常数。根据维基百科链接和Tukey的参考资料

k=1.5表示“异常值”,k=3表示“遥远”的数据

我会用这两个值中的一个来表示k


在该链接中,您还可以找到有关其他方法的更多信息。

以下是几种方法:

f.replace(regex=True,inplace=True,to_replace=r'[\$]',value=r'')
f['Price'] = f['Price'].astype(float)
median = f['Price'].median()
stdev= f['Price'].std() #74.7177102611333 doesn't make sense because of outlier
异常值=187.56
#只需过滤掉异常值
df=df.query(“价格<@outlier”)
#另一种将其限制在第X百分位的方法
df['Price']=np.其中(df['Price']>=离群值,df['Price'].分位数(0.9),df['Price']))

我想你的意思是这样的
q=df[“Price”]。分位数(0.02)
我得到了以下错误
TypeError:不能用'float'类型的非int乘以序列。
无论如何,根据函数,有效范围是(-368.75564.5)。这是有意义的,因为我“手动”给了它异常值,是否有一种基于中位数或std的更自动化的方法?
outlier = 187.56

# simply filter out the outlier
df = df.query("Price < @outlier")

# another way to cap it at some xth percentile
df['Price'] = np.where(df['Price'] >= outlier, df['Price'].quantile(0.9), df['Price'])