在包含多个NaN值的变量上进行异常值处理(我需要保留NaN值,并且NaN值的位置也很重要)

11 浏览
0 Comments

在包含多个NaN值的变量上进行异常值处理(我需要保留NaN值,并且NaN值的位置也很重要)

我需要从一个包含多个NaN的变量中移除异常值。它的样子是这样的:\n

 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

\n我需要移除变量中的异常值,而不删除或改变NaN的值或位置。我并不是指NaN是异常值,而是指连续数字中的异常值。例如,我想移除所有超出平均值加减3倍标准差范围的数字。当我进行异常值检测和移除时,我不想影响NaN的存在,因为我之后需要基于NaN执行其他操作。\n是否有可能实现这个需求?我非常感谢任何帮助。

0
0 Comments

问题的出现原因:

当对某一变量进行异常值处理时,需要保留缺失值并且缺失值的位置也很重要。这是因为缺失值可能包含重要的信息,且缺失值的位置可能会对后续分析产生影响。

解决方法:

1. 首先,可以通过设定阈值来确定一个方法来判断某个值是否为异常值。可以创建一个新的列来存储该标识。

例如:

# [True or False] 是否与平均值相差超过三个标准差
df['is_outlier'] = abs(df['X-velocity'] - (df['X-velocity'].mean())/df['X-velocity'].std() > 3

2. 然后,可以通过使用异常值标识或者判断值是否为空来选择相应的数值。

例如:

# 选择包含非异常值或空值的行
filtered = df[(~df.is_outlier) | df['X-velocity'].isnull()]

0