Удаление выбросов из списка в python - PullRequest
1 голос
/ 21 января 2020

У меня есть эти данные в Python, который является списком списка. То, что я хотел бы сделать, это найти любой выброс во втором столбце, т.е. data [0] [1], data [1] [1] и et c. а затем удалить этот список из данных. например, здесь ясно, что 90 - это выброс, и я хочу удалить этот список, содержащий 90, то есть удалить [0,5,80] из данных. Я пробовал это, но я думаю, что последняя часть не права. Любая идея, как я могу сделать это, используя списочные понимания?

data= [[0.5549872122762148, 41.176470588235304],
             [0.575197889182058, 33.55145118733509],
             [0.5561224489795918, 38.60204081632651],
             [0.5, 90]]

data_median = np.median(data, axis = 0)
data_std = np.std(data, axis = 0)
cut_off = data_std * 3
lower, upper = data_median - cut_off, data_median + cut_off
dataout = [[y for y in x if y if y < lower or y > upper] for x in data]

1 Ответ

1 голос
/ 21 января 2020

Вы можете сделать это следующим образом:

dataout = [[x,y] for x,y in data if (lower[0] < x < upper[0]) and 
                                    (lower[1] < y < upper[1])]

Но ваш cut_off слишком разрешительный.
Попробуйте вместо этого:

cut_off = data_std * 1
...