June 29, 2022

Работа со скоплениями пропусков

Одна из распространенных стратегий работы с пропущенными значениями заключается в удалении объектов с большими их скоплениями и заполнении только для оставшейся части не таких "загрязненных" записей. Это делается, чтобы не порождать много синтетических точек, для которых сразу несколько полей будут заполненными. Рассмотрим простой способ визуализации строк, имеющих по несколько пропусков. Сначала сгенерируем рабочий датасет:

import pandas as pd
import numpy as np

df = pd.DataFrame([['fourth_cat1', 'third_cat2', 1], 
                   ['first_cat1', 'third_cat2', 1], 
                   ['second_cat1', 'third_cat2', 2], 
                   [None, 'second_cat2', 5],
                   [None, None, np.nan],
                   [None, 'third_cat2', np.nan], 
                   ['second_cat1', 'third_cat2', 2], 
                   ['second_cat1', 'second_cat2', 2]])

df

Нам понадобится метод isnull, который каждый элемент преобразует в логическое значение в зависимости от того, является ли он пропуском:

df.isnull()

Теперь можно отобразить пропуски с помощью тепловой карты Seaborn и двух цветов (пропуск/не пропуск):

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(14, 5))
colours = ['#A00000', '#00000A']
sns.heatmap(df.isnull(), cmap=sns.color_palette(colours))

Также может оказаться полезна визуализация корреляции в нулевых значениях колонок:

nul_cols = df.isnull().sum()
nul_cols = nul_cols[nul_cols>0].index

df[nul_cols].isna().corr()

Если после вы обнаружили, что имеются неприемлемые скопления пропусков в некоторых записях, можно их отфильтровать по условию одновременного наличия не менее N записей из заданных. Для этого задайте параметры subset и thresh метода dropna:

df.dropna(subset=[0,1], thresh=2)

Полезные ссылки:

  1. Использование метода dropna;
  2. Заполнение пропусков.