Удаление выбросов создает пустые значения в панде - PullRequest
0 голосов
/ 18 марта 2019

У меня ненулевой массив данных df, который имеет около 100 столбцов.Я хочу удалить выбросы из каждого столбца, для чего я делаю следующее.

df1 = df[np.abs(df - df.mean()) <= (3*df.std())]

Я бы ожидал, что df1 будет содержать меньшее количество записей, чем df, но при использовании вышеуказанного метода форма остается неизменной.Кроме того, он также создает множество нулевых значений.

Насколько я понимаю, он удаляет выбросы, но вместо них теперь у меня есть нули.Правильно ли мое понимание?

1 Ответ

0 голосов
/ 18 марта 2019

Ваше понимание верно.Он удаляет выбросы и заменяет их на NaN:

np.random.seed(0)
df = pd.DataFrame(np.random.normal(0,1,(100,10)))

idx = np.abs(df - df.mean()) <= (3*df.std())
outlier_locations = np.where(idx == False)
df1 = df[idx]

print(outlier_locations)

    (array([58]), array([9]))

Если вы ожидаете, что df1 будет содержать меньше записей, чем df, то, возможно, вы захотите удалить строки или столбцы, содержащие выбросы, или просто удалитьзапись в строке, так что вы останетесь с рваными массивами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...