4.5 РАБОТА С ПРОПУЩЕННЫМИ ЗНАЧЕНИЯМИ
4.5.1 Работа с пропущенными значениями
В реальных наборах данных нередко встречаются пропущенные значения. Они могут возникать вследствие ошибок измерения, отсутствия данных, неполной регистрации наблюдений или особенностей источника информации. Библиотека Pandas предоставляет встроенные средства обнаружения и обработки пропусков (таблица 4.5.1).
Таблица 4.5.1 – Операции работы с пропусками
|
Пример |
Назначение |
|
|
Проверка пропусков |
|
Возвращает логическую
таблицу ( |
|
Подсчёт пропусков |
|
Количество пропусков по столбцам |
|
Удаление строк с пропусками |
|
Удаляет строки,
содержащие |
|
Заполнение пропусков |
|
Заменяет пропуски указанным значением |
В
Pandas пропущенные значения обозначаются специальным маркером NaN (Not a Number). Контроль
пропусков является обязательным этапом анализа, поскольку:
· они могут искажать статистические показатели;
· агрегирующие функции могут возвращать некорректные результаты;
·
алгоритмы
машинного обучения часто не работают с NaN.
Следовательно, обработка пропусков – это не вспомогательная операция, а необходимый элемент аналитической процедуры.
Почему пропуски являются проблемой? В аналитике данных пропуски встречаются очень часто. Причинами появления пропусков могут быть:
Таблица 4.5.2 – Пример отсутствия данных для оценки
|
name |
score |
|
Анна |
88 |
|
Иван |
NaN |
|
Мария |
92 |
В данном случае значение оценки для Ивана отсутствует.
Что такое NaN? В Pandas пропущенные значения обозначаются специальным маркером: NaN (Not a Number).
NaN: не является обычным числом.
Он показывает, что значение:
Почему пропуски опасны для анализа? Пропущенные значения могут:
Например, если часть данных отсутствует, среднее значение выборки может оказаться некорректным.
Поэтому контроль пропусков – обязательный этап аналитики данных.
Проверка пропусков. Для обнаружения пропущенных значений используется метод:
df.isnull()
Таблица 4.5.3 – Результат отработки метода df.isnull()
|
Значение |
Результат |
|
обычное значение |
False |
|
NaN |
True |
Таким образом, Pandas формирует логическую таблицу наличия пропусков.
Подсчёт количества пропусков. Для определения количества пропусков по столбцам используется:
df.isnull().sum()
Метод позволяет:
Таблица 4.5.4 – Результат подсчёта количества пропусков
|
Столбец |
Пропуски |
|
age |
0 |
|
score |
5 |
Удаление строк с пропусками. В некоторых случаях строки с отсутствующими значениями удаляются.
Используется метод:
df.dropna()
Метод автоматически удаляет строки, содержащие NaN.
Когда используется dropna()? Удаление строк применяется, если:
Однако: массовое удаление данных может уменьшить объём выборки.
Поэтому аналитик должен принимать решение осторожно.
Заполнение пропусков. Вместо удаления строки пропуски можно заменить другим значением.
Например:
df.fillna(0)
Метод fillna() заменяет NaN указанным значением.
Чем можно заменять пропуски? В аналитике используются разные стратегии заполнения.
Таблица 4.5.5 – Пример замены пропусков
|
Замена |
Применение |
|
0 |
технические данные |
|
Среднее |
числовые признаки |
|
Медиана |
устойчивость к выбросам |
|
"unknown" |
текстовые данные |
Выбор метода зависит:
Почему обработка пропусков обязательна? Многие алгоритмы:
не могут корректно работать с NaN.
Поэтому обработка пропусков – не вспомогательная, а обязательная аналитическая процедура.
Как пропуски влияют на статистику? Если пропуски не обработаны, результаты анализа могут стать некорректными.
Например:
df["score"].mean()
При наличии NaN:
DataFrame построен на основе массивов NumPy. Это означает, что числовые столбцы таблицы хранятся в виде массивов, что обеспечивает высокую эффективность вычислений.
# Подключение библиотеки NumPy
import numpy as np
# Извлечение столбца "score" из DataFrame
# Результат – объект типа Series
# Метод to_numpy() преобразует его в массив NumPy
scores_array = df["score"].to_numpy()
# Вычисление среднего значения средствами NumPy
print(np.mean(scores_array))
Пояснение к коду
df["score"] – возвращает столбец DataFrame в виде объекта Series.
to_numpy()– преобразует этот столбец в
массив NumPy.
После этого можно применять функции NumPy для численного анализа.
Зачем это нужно? Связь Pandas и NumPy обеспечивает:
· высокую скорость вычислений;
· возможность использования математических функций NumPy;
· интеграцию с численными алгоритмами и моделями машинного обучения.
Таким образом, Pandas отвечает за структурированное представление данных, а NumPy – за их математическую обработку.
DataFrame как аналитическая структура. В предыдущих разделах:
В Pandas данные приобретают форму аналитической таблицы.
Именно здесь объединяются:
Итоги Модуля 4
В разделах Модуля 4 рассмотрена библиотека Pandas как основной инструмент работы с табличными данными в Python. Показано, что Pandas:
· формирует структурированную табличную модель данных (DataFrame);
· обеспечивает удобный доступ к признакам и наблюдениям;
· поддерживает фильтрацию, агрегирование и обработку пропусков;
· интегрируется с библиотекой NumPy для выполнения численных операций.
Если в разделах Модуля 2 – данные были загружены, очищены; в разделах Модуля 3 – представлены в виде числовых массивов, то в разделе 2.5 они приобретают форму аналитической таблицы, пригодной для прикладного анализа. Таким образом, Pandas завершает этап формирования аналитической структуры данных и создаёт основу для интерпретации результатов. Освоенные приёмы работы с DataFrame будут закреплены в лабораторной работе №4. В следующем разделе рассматриваются средства визуализации как инструмент представления и интерпретации полученных результатов.
1. Что такое DataFrame?
2. Чем DataFrame отличается от списка списков?
3. Как осуществляется загрузка CSV в DataFrame?
4. Какие методы используются для первичной диагностики таблицы?
5. Чем отличается Series от DataFrame?
6. Как выполняется фильтрация строк по условию?
7. Что такое агрегирование данных?
8. Какие функции используются для работы с пропущенными значениями?
9. Почему Pandas тесно связан с NumPy?
10. В чём заключается аналитическая роль табличной структуры данных?