Я смотрю набор данных Titani c и извлек информацию о том, на какой палубе находилась кабина пассажира, исходя из номера кабины. Большинство данных номера кабины отсутствовало, поэтому, когда я ввожу joint_df.Deck.isnull().value_counts()
, я получаю следующее:
True 1137
False 379
Далее я хочу заполнить отсутствующие данные, поэтому я рассчитал примерное распределение того, что колода, в которой находилась каюта человека, основывалась на классе билетов:
choice_dict = {
1: [['A', 'B', 'C', 'D', 'E'],
[.12, .22, .32, .20, .14]],
2: [['D', 'E', 'F'],
[.16, .34, .50]],
3: [['E', 'F', 'G'],
[1/3, 1/3, 1/3]]
}
Я думал о том, чтобы перебрать классы билетов (1-й, 2-й, 3-й) с отсутствующей информацией «Палуба» и заполнить эту недостающую информацию с помощью numpy.random.choice
. Моя попытка сделать это выглядит следующим образом:
for key, value in choice_dict.items():
pclass = key
choices = value[0]
probs = value[1]
num = len(joint_df.loc[joint_df.Pclass == key & joint_df.Deck.isnull(), 'Deck'])
fill_in = np.random.choice(choices, size=num, p=probs)
print("Pclass: ", pclass)
print("num missing vals: ", num)
print("fill ins: ", fill_in)
Однако я заметил, что я получаю только 72 пропущенных значения в 1-м классе и 72 пропущенных значения в 3-м классе без пропущенных значений во 2-м классе.
Это не добавляет к 1137 пропущенным значениям, которые мне нужно заполнить.
Я предполагаю, что моя проблема заключается в том, как я пытаюсь использовать Pandas.DataFrame.loc
...
Если да, то как мне использовать индексацию DataFrame для правильного достижения моих целей? желаемые результаты. Если нет, то в чем моя проблема?