【发布时间】:2019-10-30 11:29:22
【问题描述】:
假设我有一个数据框
import pandas as pd
data = pd.DataFrame()
data["name"] = ["A","B","C","D","E","F","G","H","I","J"]
data["age"] = [22,9,505,39,50,17,26,33,-43,48]
data["marks"] = [422,59,75,3,50,47,2,83,63,48]
data
现在我想从数值变量中删除所有异常值。我可以使用 1.5+- IQR 公式来做到这一点。
Q1 = data.age.quantile(0.25)
Q3 = data.age.quantile(0.75)
IQR = Q3 - Q1
d=data.loc[~((data.age < (Q1 - 1.5 * IQR)) | (data.age > (Q3 + 1.5 * IQR))),]
d
我想创建一个用户定义的函数,以便我可以输入变量的名称并自动删除异常值。我曾尝试编写用户定义函数:
def outlier (data,age):
Q1 = data.age.quantile(0.25)
Q3 = data.age.quantile(0.75)
IQR = Q3 - Q1
data.loc[~((data.age < (Q1 - 1.5 * IQR)) | (data.age > (Q3 + 1.5 * IQR))),]
return data
outlier(data,marks)
但是,它表示标记未定义。请帮我解决这个问题。
【问题讨论】:
-
代码中定义的变量
marks在哪里,您在outlier(data, marks)函数调用中使用它。