Заполните пустые значения в датафрейме с условием

Вопрос или проблема

traindf[traindf['Gender'] == 'female']['Age'].fillna(value=femage,inplace=True)

Я пытался обновить нулевые значения в колонке возраста в датафрейме средними значениями. Здесь я пытался заменить нулевые значения в колонке возраста для женского пола на средний возраст женщин. Но колонка не обновляется. Почему?

traindf.loc[traindf['Gender'] == 'female','Age'] = traindf.loc[traindf['Gender'] == 'female','Age'].fillna(value=femage)

Ответ или решение

В вашем вопросе вы пытаетесь заполнить пропуски в столбце "Age" для женщин в датафрейме, используя среднее значение для женщин (переменная femage). Давайте разберемся, почему ваш первоначальный подход не сработал и как правильно обновить значения.

Когда вы используете метод fillna() с параметром inplace=True, это применимо только к возвращаемому объекту, а не к оригинальному датафрейму. Поэтому данные в traindf фактически не обновляются, когда вы вызываете fillna() в этом контексте.

Ваш скорректированный код, который выполняет задачу правильно, выглядит так:

traindf.loc[traindf['Gender'] == 'female', 'Age'] = traindf.loc[traindf['Gender'] == 'female', 'Age'].fillna(value=femage)

Этот код работает следующим образом:

  1. Мы используем метод .loc[], чтобы выбрать строки, где пол (Gender) равен "female", и указать, что хотим обновить столбец "Age".
  2. Внутри этого .loc[] стараемся заполнить пропуски значением femage только в отфильтрованных данных (все записи с полом "female" в столбце "Age").

Таким образом, пропуски в столбце "Age" для женщин будут успешно заменены на среднее значение возраста женщин.

Ещё одна альтернатива, которую вы могли бы рассмотреть, это использование метода apply(), если вы хотите сделать это более гибким способом:

traindf['Age'] = traindf.apply(lambda row: femage if pd.isnull(row['Age']) and row['Gender'] == 'female' else row['Age'], axis=1)

Этот подход также позволяет вам проверять условие и менять значения на femage только для женщин с пропусками в возрасте.

Надеюсь, это поможет вам правильно обновить значения в вашем датафрейме! Если у вас есть дополнительные вопросы, не стесняйтесь их задавать.

Оцените материал
Добавить комментарий

Капча загружается...