Как заменить NaN в датасете?
В датасете есть столбец с номинативными переменными, в ячейках которого присутствуют пустые значения NaN.
Можно ли как-то заменить или заполнить эти значения, например, не самым часто встречающимся значением, а с частотой, с которой встречаются имеющиеся данные?
Например, столбец Пол:
в нём 2/3 м и 1/3 ж. и заполнить пустые значения на 2/3 м и на 1/3 ж.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Алгоритм действий:
- Создайте переменную маску - “mask”, состоящую из булевых значений и показывающую строки в которых столбец «пол» имеет значение NaN
- Посчитайте число True в mask и сохраните полученное значение в переменную “n”.
- Выбрав по маске “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 если решение не совсем понятно - советую выполнять его по шагам и смотреть, что получилось на каждом шаге...