多行变量的异常值删除包含 NAN(我需要保留 NAN,NAN 的位置也很重要)[重复]
Posted
技术标签:
【中文标题】多行变量的异常值删除包含 NAN(我需要保留 NAN,NAN 的位置也很重要)[重复]【英文标题】:Outlier removal on a variable with several rows contain NAN (I need to keep the NAN and the position of the NAN also matters) [duplicate] 【发布时间】:2019-04-09 03:58:05 【问题描述】:我需要从包含多个 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 执行其他操作)。
有什么方法可以做到吗?感谢您的帮助。
【问题讨论】:
取决于你认为什么是异常值。请在您的问题中定义它。如果没有 NaN 值,你会怎么做?您还应该提供Minimal, Complete, and Verifiable example。 如何创建另一个“列”(X_velocity_is_NaN),用 0 和 1 填充它(取决于原始列中的 NaN 值),然后在原始列中执行异常值和/或 NaN 删除? @moe 您的解决方案接近我接受的答案。所以也谢谢! 【参考方案1】:如果您有一种方法可以确定某物是否为异常值(我想您有一些阈值),您可以创建一个新列来存储此标志。
例如:
# [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()]
【讨论】:
以上是关于多行变量的异常值删除包含 NAN(我需要保留 NAN,NAN 的位置也很重要)[重复]的主要内容,如果未能解决你的问题,请参考以下文章