使用分位数 python 移除异常值
Remove outlier using quantile python
我需要删除回归数据集的离群值。假设数据集包含以下方式
# dataset named df
humidity windspeed
0.01 4.9
4.5 20.0
3.5 5.0
50.0 4.0
4.2 0.05
3.4 3.9
18.0 4.7
# code for outlier removal
def quantile(columns):
for column in columns:
lower_quantile = df[column].quantile(0.25)
upper_quantile = df[column].quantile(0.75)
df[column] = df[(df[column] >= lower_quantile) & df[column] <= upper_quantile)
columns = ['humidity', 'windspeed']
quantile(columns)
仔细检查,列湿度有三个异常值,分别为 50.0、18.0、0.01,但对于风速列,异常值分别为 20 和 0.05,并且两列异常值不在同一行。在这种情况下,如果我用上面的代码删除异常值,我会得到以下错误:
Value error: Columns must be same length as key
据我了解,一旦异常值被移除,每列中行的长度就不一样了,因此 return 是我的错误。有没有其他方法可以解决这个问题?
您可以同时过滤两列,
df[
df['humidity'].between(df['humidity'].quantile(.25), df['humidity'].quantile(.75)) &\
df['windspeed'].between(df['windspeed'].quantile(.25), df['windspeed'].quantile(.75))
]
在这种情况下,所有三个 df
、'humidity'
的条件和 'windspeed'
的条件共享相同的长度,因为它们都来自相同的 df
.
我需要删除回归数据集的离群值。假设数据集包含以下方式
# dataset named df
humidity windspeed
0.01 4.9
4.5 20.0
3.5 5.0
50.0 4.0
4.2 0.05
3.4 3.9
18.0 4.7
# code for outlier removal
def quantile(columns):
for column in columns:
lower_quantile = df[column].quantile(0.25)
upper_quantile = df[column].quantile(0.75)
df[column] = df[(df[column] >= lower_quantile) & df[column] <= upper_quantile)
columns = ['humidity', 'windspeed']
quantile(columns)
仔细检查,列湿度有三个异常值,分别为 50.0、18.0、0.01,但对于风速列,异常值分别为 20 和 0.05,并且两列异常值不在同一行。在这种情况下,如果我用上面的代码删除异常值,我会得到以下错误:
Value error: Columns must be same length as key
据我了解,一旦异常值被移除,每列中行的长度就不一样了,因此 return 是我的错误。有没有其他方法可以解决这个问题?
您可以同时过滤两列,
df[
df['humidity'].between(df['humidity'].quantile(.25), df['humidity'].quantile(.75)) &\
df['windspeed'].between(df['windspeed'].quantile(.25), df['windspeed'].quantile(.75))
]
在这种情况下,所有三个 df
、'humidity'
的条件和 'windspeed'
的条件共享相同的长度,因为它们都来自相同的 df
.