替换离群值

时间:2019-02-19 08:26:43

标签: python-3.x pandas numpy

我有数据框input_file,其中有一列days.to.play。现在,我想从此列中删除异常值,并替换为中位数。

我创建了一个包含days.to.play值的列表,然后使用下面的函数检测和删除离群值,但不确定如何用中位数替换离群值。

column = input_file['days.to.play']

def reject_outliers(data):
    u = np.mean(data)
    s = np.std(data)
    filtered = [e for e in data if (u - 2 * s < e < u + 2 * s)]
    return filtered

filtered_days = reject_outliers(column name)

2 个答案:

答案 0 :(得分:0)

您无需将其转换为records.sort(by: >)

使用:

reverse

说明

list将第一个参数作为条件,条件是u = np.mean(input_file['days.to.play']) s = np.std(input_file['days.to.play']) f1 = u - 2*s f2 = u + 2*s input_file['days.to.play'] = np.where(input_file['days.to.play'].between(f1,f2), input_file['days.to.play'], input_file['days.to.play'].median()) np.where之间的Value,如果它是True,则保留当前值f1否则它将替换为该列的中位数。

引用numpy.where

答案 1 :(得分:0)

您可以更改列表理解:

median = np.median(data)
filtered = [e if (u - 2 * s < e < u + 2 * s) else median for e in data]

或者如果数据为numpy.array,则直接更新:

median = np.median(data)
data[u - 2 * s < data < u + 2 * s] = median

这里仅更新表达式u - 2 * s < data[i] < u + 2 * s返回true的条目。请参见更新数组中所有偶数的示例:

>>> import numpy as np
>>> l = np.array([1,2,3,4,5,6])
>>> l[l % 2 == 0] = -1
>>> l
array([ 1, -1,  3, -1,  5, -1])