Как заменить NaN в датасете?

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

Можно ли как-то заменить или заполнить эти значения, например, не самым часто встречающимся значением, а с частотой, с которой встречаются имеющиеся данные?

Например, столбец Пол:
в нём 2/3 м и 1/3 ж. и заполнить пустые значения на 2/3 м и на 1/3 ж.


Ответы (1 шт):

Автор решения: MaxU

Алгоритм действий:

  1. Создайте переменную маску - “mask”, состоящую из булевых значений и показывающую строки в которых столбец «пол» имеет значение NaN
  2. Посчитайте число True в mask и сохраните полученное значение в переменную “n”.
  3. Выбрав по маске “mask” нужные строки и столбец «пол», присвойте “n” случайных значений, воспользовавшись функцией np.random.choice и параметром “p” - для задания того с какой вероятностью выбирать значения.

mask = df["sex"].isna()
# считаем статистику распределения значений
p = df["sex"].value_counts() / len(df["sex"].dropna())
# заполняем пропуски с вероятностью `p`
df.loc[mask, "sex"] = \
    np.random.choice(p.index.to_list(), 
                     size=mask.sum(), 
                     p=p.to_list())

PS если решение не совсем понятно - советую выполнять его по шагам и смотреть, что получилось на каждом шаге...

→ Ссылка