我需要从其中包含多个NAN的变量中删除异常值。看起来像这样:
X-velocity
1 0.0345
2 0.0222
3 0.0034
4 0.5604
5 0.4326
6 NaN
7 0.0333
8 0.3635
9 0.3345
10 0.3468
11 0.4573
12 0.7985
13 0.9359
14 NAN
15 0.4635
16 0.6857
17 0.4239
18 NAN
19 0.3849
20 0.3726
21 0.4637
22 0.3647
23 NAN
24 0.2938
25 0.5227
我需要从变量中删除异常值,而不删除或更改NAN的值或位置。我不是说NAN是离群值,而是连续数字的离群值。例如,我要删除均值+/- 3 *标准偏差范围之外的所有数字。当我执行异常值检测和删除时,我不想影响NAN,而是希望它们在那儿(因为稍后需要基于NAN执行其他操作)。
有什么可行的方法吗?我感谢您的帮助。
答案 0 :(得分:0)
如果您有一种方法可以确定某物是否是异常值(我想您有某个阈值),则可以创建一个存储此标志的新列。
例如:
# [True or False] is this more than 3 standard deviations away from the mean
df['is_outlier'] = abs(df['X-velocity'] - (df['X-velocity'].mean())/df['X-velocity'].std() > 3
然后可以同时使用此异常值标记或值是否为空来选择值:
# Select rows that contain non-outliers or null values
filtered = df[(~df.is_outlier) | df['X-velocity'].isnull()]