Ответ 1
Использование .loc
рекомендуется здесь, потому что методы df.Age.isnull()
, df.Gender == i
и df.Pclass == j+1
могут возвращать представление срезов фрейма данных или могут возвращать копию. Это может запутать pandas.
Если вы не используете .loc
, вы в конечном итоге вызываете все 3 условия подряд, что приводит к проблеме, называемой цепной индексацией. Когда вы используете .loc
, однако вы получаете доступ ко всем своим условиям за один шаг, а pandas больше не путаете.
Вы можете узнать больше об этом, а также некоторые примеры того, когда не использовать .loc
приведет к сбою операции в документации pandas.
Простой ответ заключается в том, что, хотя вы часто можете избежать использования .loc
и просто набирать (например)
df['Age_fill'][(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1)] \
= median_ages[i,j]
вы всегда получите предупреждение SettingWithCopy
, и ваш код будет немного беспорядочным для него.
По моему опыту .loc
мне понадобилось некоторое время, чтобы окунуться в голову, и это немного раздражало обновление моего кода. Но это действительно супер просто и очень интуитивно понятно: df.loc[row_index,col_indexer]
.
Для получения дополнительной информации см. документацию pandas по Индексация и выбор данных.