Python 基于中位数和标准偏差去除异常值
//fi文件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,
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'])