заменить выбросы в информационном кадре теоретическим минимумом / максимумом - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть фрейм данных, и меня попросили заменить выбросы в фрейме данных теоретическим минимумом / максимумом. Тем не менее, я не совсем уверен, что это значит.

Я думаю, что я рассчитал теоретический минимум / максимум -

outliers = pd.DataFrame(columns=['min', 'count below', 'max', 'count above'])

for col in df:
  if pd.api.types.is_numeric_dtype(df[col]) and (len(df[col].value_counts()) > 0) and not all(df[col].value_counts().index.isin([0, 1])):

    q1 = df[col].quantile(.25)
    q3 = df[col].quantile(.75)
    min = q1 - (1.5 * (q3 - q1))
    max = q3 + (1.5 * (q3 - q1))

    outliers.loc[col] = (min, df[col][df[col] < min].count(), max, df[col][df[col] > max].count())

Вот несколько строк моего фрейма данных:

    age sex cp  trestbps    chol    fbs restecg thalach exang   oldpeak slope   ca  thal    num
  0 28  1   2        130    132       0       2 185         0   0.0       NaN   NaN  NaN    0
  1 29  1   2        120    243       0       0 160         0   0.0       NaN   NaN  NaN    0
  2 29  1   2        140    NaN       0       0 170         0   0.0       NaN   NaN  NaN    0
  3 30  0   1        170    237       0       1 170         0   0.0       NaN   NaN    6    0
  4 31  0   2        100    219       0       1 150         0   0.0       NaN   NaN  NaN    0
  5 32  0   2        105    198       0       0 165         0   0.0       NaN   NaN  NaN    0
  .
  .
  .

fbs также содержит 1 для нескольких значений

exang также содержит 1 для нескольких значений

oldpeak также содержит несколько плавает между 0 и 3

slope в основном NaN, но также содержит 1 и 2 для некоторых значений

thal в основном NaN но также содержит 3, 6 и 7 для некоторых значений

num также содержит 1 для почти половины значений

Итак, теперь я не уверен, как заменить выбросы теоретическим мин / макс.

1 Ответ

0 голосов
/ 14 апреля 2020

Вам нужно будет выяснить, что представляет собой выброс для ваших целей. Я программист, а не статистик, но я подозреваю, что все, что выходит за рамки теоретического минимума / максимума, отвечает всем требованиям.

Что касается фактической замены выброса ... вы можете проверить ответ на этот пост. Условная замена Pandas

Сказав это, приведенный ниже код может помочь вам.

df.loc[df[col] > outliers.loc[col]['max'], df[col]] = outliers.loc[col]['max']
df.loc[df[col] < outliers.loc[col]['min'], df[col]] = outliers.loc[col]['min']

Перечитывая вопрос, звучит так, как будто вы ищите больше информации о том, что представляет собой выброс, и когда у вас достаточно данных, чтобы быть статистически значимыми. Если это так: рассмотрите возможность добавления дополнительных тегов к своему вопросу.

...