我有数据框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)
答案 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
否则它将替换为该列的中位数。
答案 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])