Удаление выбросов в переменной с несколькими строками содержит NAN (мне нужно сохранить NAN, и положение NAN также имеет значение)
Мне нужно удалить выбросы из переменной, которая содержит несколько 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).
Есть ли какой-нибудь возможный способ сделать это? Я ценю любую помощь.
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()]