В столбцах living_area и kitchen_area мы видим 1903 и 2278 пропущенных значений. Эти пропуски составляют относительно большой процент от всех значений — 8% и 9% соответственно, поэтому избавиться от них мы не можем. Данные в этих столбцах понадобятся нам в дальнейшем исследовании, поэтому будет правильным обработать пропуски, заменив их на такие значения, которые будут максимально приближены к реальности.
# создадим функцию categorize_area, которая разделит продаваемую недвижимость на категории в зависимости от их площади
def categorize_area(area):
'''
Возвращает категорию по величине площади недвижимости, используя правила:
— 'маленькая', если площадь меньше или равна 30 м²
— 'средняя', если площадь больше 30 м² и ниже или равна 70 м²
— 'большая', если площадь больше 70 ²2 и ниже или равна 150 м²
— 'очень большая', если площадь больше 150 м2
'''
try:
if 0 < area <= 30:
return 'маленькая'
elif 30 < area <= 70:
return 'средняя'
elif 70 < area <= 150:
return 'большая'
elif area > 150:
return 'очень большая'
except:
pass
# применим созданную функцию к датафрейму, создав столбец с категориями недвижимости по площади
real_estate_data['total_area_category'] = real_estate_data['total_area'].apply(categorize_area)
# создадим ещё одну функцию fillna_area
# которая в качестве аргумента будет принимать столбец, в котором нужно заменить пропуски и датафрейм
def fillna_area(col, data):
# найдём среднее значение площади недвижимости по каждой категории
mean_area = data.groupby('total_area_category')['total_area'].mean()
# для каждой категории в столбце total_area_category
for category in data['total_area_category'].unique():
mean_val = mean_area[category]
# с помощью логической индексации функция найдёт те строки в столбце col
# в которых есть пропущенное значение, а значение столбца total_area_category равно category
# и присвоит строке среднее значение её category
data.loc[(data[col].isna()) & (data['total_area_category'] == category), col] = mean_val
return data
# применим созданную функцию fillna_area к столбцам living_area и kitchen_area
real_estate_data = fillna_area('living_area', real_estate_data)
real_estate_data = fillna_area('kitchen_area', real_estate_data)