Вывести строки с пропущенными значениями pandas

Содержание
  1. Как обрабатывать недостающие данные с помощью Python
  2. обзор
  3. 1. Набор данных диабета индейцев пима
  4. 2. Отметьте отсутствующие значения
  5. 3. Отсутствие значений вызывает проблемы
  6. 4. Удалить строки с пропущенными значениями
  7. 5. Вменять недостающие значения
  8. 6. Алгоритмы, поддерживающие пропущенные значения
  9. Дальнейшее чтение
  10. Резюме
  11. Питон: Как обрабатывать отсутствующие данные в фрейме данных Pandas
  12. Вступление
  13. Проверка данных
  14. Настройка Отсутствующих Значений Данных
  15. Удаление Строк С Пропущенными Значениями
  16. Заполнение Пропущенных значений
  17. Заполните отсутствующие значения фрейма данных столбцами Mean, Median и Mode
  18. Заполните недостающие значения фрейма данных Константой
  19. Прямое Заполнение Отсутствующих Значений Фрейма Данных
  20. Обратное Заполнение Отсутствующих Значений Фрейма Данных
  21. Заполните недостающие значения фрейма данных интерполяцией
  22. Вывод

Как обрабатывать недостающие данные с помощью Python

Дата публикации 2017-03-20

В реальных данных часто отсутствуют значения.

Данные могут иметь пропущенные значения по ряду причин, таких как наблюдения, которые не были записаны, и повреждение данных.

Обработка пропущенных данных важна, так как многие алгоритмы машинного обучения не поддерживают данные с пропущенными значениями.

В этом уроке вы узнаете, как обрабатывать недостающие данные для машинного обучения с Python.

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

  • Как пометить неверные или поврежденные значения как отсутствующие в вашем наборе данных.
  • Как удалить строки с отсутствующими данными из вашего набора данных.
  • Как рассчитать пропущенные значения со средними значениями в вашем наборе данных.

Заметка: Примеры в этом посте предполагают, что у вас установлен Python 2 или 3 с установленными Pandas, NumPy и Scikit-Learn, в частности, версия scikit-learn 0.18 или выше.

  • Обновление март / 2018: Добавлена ​​альтернативная ссылка для загрузки набора данных, так как кажется, что оригинал удален.

обзор

Этот урок разделен на 6 частей:

  1. Набор данных диабета индейцев пима: где мы смотрим на набор данных, который знает пропущенные значения.
  2. Пометить отсутствующие значения: где мы узнаем, как пометить пропущенные значения в наборе данных.
  3. Отсутствие значений вызывает проблемы: где мы видим, как алгоритм машинного обучения может потерпеть неудачу, если он содержит пропущенные значения.
  4. Удалить строки с отсутствующими значениями: где мы видим, как удалить строки, которые содержат пропущенные значения.
  5. Вменяйте недостающие ценности: где мы заменяем пропущенные значения разумными значениями.
  6. Алгоритмы, которые поддерживают недостающие значения: где мы узнаем об алгоритмах, которые поддерживают пропущенные значения.

Во-первых, давайте взглянем на наш примерный набор данных с пропущенными значениями.

1. Набор данных диабета индейцев пима

Набор данных диабета индейцев пимапредполагает прогнозирование диабета в течение 5 лет у индейцев Пима с учетом медицинских данных.

Это бинарная (2-классная) задача классификации. Количество наблюдений для каждого класса не сбалансировано. Есть 768 наблюдений с 8 входными переменными и 1 выходной переменной. Имена переменных следующие:

  • 0. Количество беременных.
  • 1. Концентрация глюкозы в плазме в течение 2 часов при оральном тесте на толерантность к глюкозе.
  • 2. Диастолическое артериальное давление (мм рт. Ст.).
  • 3. Толщина трехглавой кожи (мм).
  • 4. 2-часовой сывороточный инсулин (мю Ед / мл).
  • 5. Индекс массы тела (вес в кг / (рост в м) ^ 2).
  • 6. Диабет родословной.
  • 7. Возраст (годы).
  • 8. Переменная класса (0 или 1).

Базовая эффективность прогнозирования наиболее распространенного класса — точность классификации приблизительно 65%. Лучшие результаты достигают точности классификации примерно 77%.

Образец первых 5 строк приведен ниже.

Этот набор данных, как известно, имеет пропущенные значения.

В частности, отсутствуют некоторые наблюдения для некоторых столбцов, которые помечены как нулевое значение.

Мы можем подтвердить это определением этих столбцов и знанием предметной области, что нулевое значение недопустимо для этих мер, например, ноль для индекса массы тела или артериального давления недопустим.

Загрузите набор данных здесьи сохраните его в текущем рабочем каталоге с именем файлаПим-индусы-diabetes.csv(Обновить:скачать отсюда).

2. Отметьте отсутствующие значения

В этом разделе мы рассмотрим, как мы можем идентифицировать и пометить значения как пропущенные.

Мы можем использовать графики и сводную статистику, чтобы помочь идентифицировать отсутствующие или поврежденные данные.

Мы можем загрузить набор данных как Pandas DataFrame и распечатать сводную статистику по каждому атрибуту.

Запуск этого примера приводит к следующему выводу:

Мы можем видеть, что есть столбцы, которые имеют минимальное значение ноль (0). В некоторых столбцах нулевое значение не имеет смысла и указывает на недопустимое или отсутствующее значение.

В частности, следующие столбцы имеют недопустимое нулевое минимальное значение:

  • 1: концентрация глюкозы в плазме
  • 2: диастолическое артериальное давление
  • 3: толщина трицепса
  • 4: 2-часовой сывороточный инсулин
  • 5: индекс массы тела

Давайте подтвердим это, глядя на необработанные данные, в примере печатаются первые 20 строк данных.

Запустив пример, мы ясно видим значения 0 в столбцах 2, 3, 4 и 5.

Мы можем получить количество пропущенных значений в каждом из этих столбцов. Мы можем сделать это, пометив все значения в подмножестве интересующего нас DataFrame с нулевыми значениями как True. Затем мы можем посчитать количество истинных значений в каждом столбце.

Мы можем сделать это, пометив все значения в подмножестве интересующего нас DataFrame с нулевыми значениями как True. Затем мы можем посчитать количество истинных значений в каждом столбце.

При выполнении примера выводится следующий вывод:

Мы видим, что столбцы 1,2 и 5 имеют только несколько нулевых значений, тогда как столбцы 3 и 4 показывают намного больше, почти половину строк.

Это подчеркивает, что для разных столбцов могут потребоваться разные стратегии «пропущенного значения», например чтобы убедиться, что осталось еще достаточное количество записей для обучения модели прогнозирования.

В Python, в частности Pandas, NumPy и Scikit-Learn, мы отмечаем пропущенные значения как NaN.

Значения со значением NaN игнорируются в таких операциях, как sum, count и т. Д.

Мы можем легко пометить значения как NaN с помощью Pandas DataFrame, используяфункция replace ()на подмножестве интересующих нас столбцов.

После того, как мы отметили пропущенные значения, мы можем использоватьфункция isnull ()пометить все значения NaN в наборе данных как True и получить счетчик пропущенных значений для каждого столбца.

При выполнении примера выводится количество пропущенных значений в каждом столбце. Мы видим, что столбцы 1: 5 имеют то же количество пропущенных значений, что и нулевые значения, указанные выше. Это признак того, что мы правильно отметили идентифицированные пропущенные значения.

Мы можем видеть, что столбцы с 1 по 5 имеют то же количество пропущенных значений, что и нулевые значения, указанные выше. Это признак того, что мы правильно отметили идентифицированные пропущенные значения.

Это полезное резюме. Мне всегда нравится смотреть на фактические данные, чтобы подтвердить, что я не обманывал себя.

Ниже приведен тот же пример, за исключением того, что мы печатаем первые 20 строк данных.

Запустив пример, мы ясно видим значения NaN в столбцах 2, 3, 4 и 5. В столбце 1 пропущено только 5 значений, поэтому неудивительно, что мы не увидели пример в первых 20 строках.

Из необработанных данных ясно, что маркировка пропущенных значений имела ожидаемый эффект.

Прежде чем мы рассмотрим обработку пропущенных значений, давайте сначала продемонстрируем, что наличие пропущенных значений в наборе данных может вызвать проблемы.

3. Отсутствие значений вызывает проблемы

Отсутствие значений в наборе данных может привести к ошибкам в некоторых алгоритмах машинного обучения.

В этом разделе мы попытаемся оценить алгоритм линейного дискриминантного анализа (LDA) для набора данных с пропущенными значениями.

Это алгоритм, который не работает, если в наборе данных отсутствуют значения.

В приведенном ниже примере отмечены отсутствующие значения в наборе данных, как мы это делали в предыдущем разделе, затем предпринимаются попытки оценить LDA с использованием 3-кратной перекрестной проверки и вывести среднюю точность.

Выполнение примера приводит к ошибке, как показано ниже:

Это как мы и ожидаем.

Нам запрещено оценивать алгоритм LDA (и другие алгоритмы) в наборе данных с пропущенными значениями.

Теперь мы можем взглянуть на методы для обработки пропущенных значений.

4. Удалить строки с пропущенными значениями

Самая простая стратегия обработки пропущенных данных — удалить записи, содержащие пропущенное значение.

Мы можем сделать это, создав новый DataFrame Pandas, в котором удалены строки, содержащие пропущенные значения.

Панды обеспечиваетфункция dropna ()это можно использовать для удаления столбцов или строк с отсутствующими данными. Мы можем использовать dropna (), чтобы удалить все строки с отсутствующими данными, следующим образом:

Запустив этот пример, мы увидим, что количество строк было агрессивно сокращено с 768 в исходном наборе данных до 392, при этом все строки, содержащие NaN, были удалены.

Теперь у нас есть набор данных, который мы могли бы использовать для оценки алгоритма, чувствительного к пропущенным значениям, такого как LDA.

Пример выполняется успешно и печатает точность модели.

Удаление строк с пропущенными значениями может быть слишком ограничивающим для некоторых задач прогнозного моделирования, альтернативой является вменение пропущенных значений.

5. Вменять недостающие значения

Вменение относится к использованию модели для замены пропущенных значений.

Есть много вариантов, которые мы могли бы рассмотреть при замене отсутствующего значения, например:

  • Постоянное значение, имеющее значение в домене, например 0, отличное от всех других значений.
  • Значение из другой случайно выбранной записи.
  • Среднее значение, медиана или значение режима для столбца.
  • Значение оценивается другой прогнозной моделью.

Любое вменение, выполненное в обучающем наборе данных, должно быть выполнено на новых данных в будущем, когда необходимы прогнозы из окончательной модели. Это необходимо учитывать при выборе способа вменения пропущенных значений.

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

Панды обеспечиваетфункция fillna ()для замены пропущенных значений конкретным значением.

Например, мы можем использовать fillna (), чтобы заменить отсутствующие значения средним значением для каждого столбца следующим образом:

Выполнение примера обеспечивает подсчет количества пропущенных значений в каждом столбце, показывая ноль пропущенных значений.

Библиотека Scikit-Learn обеспечиваетImputer () класс предварительной обработкиэто может быть использовано для замены отсутствующих значений.

Это гибкий класс, который позволяет вам указать значение для замены (это может быть что-то отличное от NaN) и метод, используемый для его замены (например, среднее значение, медиана или мода). Класс Imputer работает непосредственно с массивом NumPy вместо DataFrame

В приведенном ниже примере класс Imputer используется для замены отсутствующих значений средним значением каждого столбца, а затем выводит число значений NaN в преобразованной матрице.

Выполнение примера показывает, что все значения NaN были вменены успешно.

При выполнении примера печатается точность LDA на преобразованном наборе данных.

Попробуйте заменить отсутствующие значения другими значениями и посмотрите, сможете ли вы повысить производительность модели.

Возможно, отсутствующие значения имеют значение в данных.

Далее мы рассмотрим использование алгоритмов, которые рассматривают пропущенные значения как просто другое значение при моделировании.

6. Алгоритмы, поддерживающие пропущенные значения

Не все алгоритмы дают сбой, когда отсутствуют данные.

Существуют алгоритмы, которые можно сделать устойчивыми к отсутствующим данным, например, k-Nearest Neighbors, которые могут игнорировать столбец из меры расстояния, если значение отсутствует.

Существуют также алгоритмы, которые могут использовать отсутствующее значение в качестве уникального и другого значения при построении прогнозирующей модели, например деревья классификации и регрессии.

К сожалению, scikit-learn реализации деревьев решений и k-Nearest Neighbours не устойчивы к отсутствующим значениям.Хотя это рассматривается,

Тем не менее, это остается вариантом, если вы планируете использовать другую реализацию алгоритма (например,xgboost) или разработка собственной реализации.

Дальнейшее чтение

Резюме

В этом руководстве вы узнали, как обрабатывать данные машинного обучения, содержащие пропущенные значения.

В частности, вы узнали:

  • Как пометить отсутствующие значения в наборе данных как numpy.nan.
  • Как удалить строки из набора данных, которые содержат пропущенные значения.
  • Как заменить пропущенные значения разумными значениями.

У вас есть вопросы по поводу пропущенных значений?
Задайте свои вопросы в комментариях, и я сделаю все возможное, чтобы ответить.

Источник

Питон: Как обрабатывать отсутствующие данные в фрейме данных Pandas

В этом уроке мы рассмотрим, как обрабатывать недостающие данные в фрейме данных Pandas. Мы рассмотрим очистку данных, а также удаление и заполнение значений с использованием среднего значения, режима, медианы и интерполяции.

Автор: Hassan Saeed
Дата записи

Вступление

Pandas – это библиотека Python для анализа и манипулирования данными. Почти все операции в pandas вращаются вокруг DataFrame s, абстрактной структуры данных, специально созданной для обработки метрической тонны данных.

В вышеупомянутой метрической тонне данных некоторые из них обязательно будут отсутствовать по разным причинам. В результате отсутствует ( null /| None //Nan ) значение в нашем DataFrame .

Именно поэтому в этой статье мы обсудим, как обрабатывать недостающие данные в панде DataFrame .

Проверка данных

Реальные наборы данных редко бывают идеальными. Они могут содержать пропущенные значения, неправильные типы данных, нечитаемые символы, ошибочные строки и т. Д.

Первый шаг к любому правильному анализу данных-это очистка и организация данных, которые мы позже будем использовать. Мы обсудим несколько общих проблем, связанных с данными, которые могут возникнуть в наборе данных.

Для этого мы будем работать с небольшими сотрудниками. Файл .csv выглядит следующим образом:

Давайте импортируем его в DataFrame :

Присмотревшись повнимательнее к набору данных, отметим, что Pandas автоматически присваивает NaN , если значение для конкретного столбца является пустой строкой » | NA или NaN . Однако бывают случаи, когда пропущенные значения представляются пользовательским значением, например строкой ‘na’ или 0 для числового столбца.

Например, 6-я строка имеет значение na для столбца Team , в то время как 5-я строка имеет значение 0 для колонки Зарплата .

Настройка Отсутствующих Значений Данных

В нашем наборе данных мы хотим рассматривать их как пропущенные значения:

  1. А 0 значение в столбце Зарплата
  2. Значение/| na в столбце Team

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

С другой стороны, если мы хотим сопоставить список значений, которые должны рассматриваться как пропущенные значения во всех столбцах, мы можем передать список кандидатов, которые мы хотим глобально рассматривать как пропущенные значения, параметру na_values :

Обратите внимание, что здесь значение Gender в 4-й строке также NaN теперь, поскольку мы определили n.a. как пропущенное значение выше.

Какая реализация будет выбрана, зависит от характера набора данных.

Например, некоторые числовые столбцы в наборе данных могут нуждаться в обработке 0 как пропущенное значение, в то время как другие столбцы могут этого не делать. Поэтому вы можете использовать первый подход, когда вы настраиваете пропущенные значения на основе столбцов.

Точно так же, если мы хотим лечить 0 например, в качестве пропущенного значения глобально мы можем использовать второй метод и просто передать массив таких значений в аргумент na_values .

После того как мы определили все пропущенные значения во фрейме данных и правильно их аннотировали, есть несколько способов обработки пропущенных данных.

Удаление Строк С Пропущенными Значениями

Одним из подходов было бы удаление всех строк, содержащих пропущенные значения. Это можно легко сделать с помощью функции dropna () , специально предназначенной для этого:

на месте вносит все изменения в существующий Фрейм данных , не возвращая новый. Без него вам пришлось бы заново назначить фрейм данных самому себе.

Аргумент axis указывает, работаете ли вы со строками или столбцами – 0 будучи рядами, и 1 быть колоннами.

Вы можете контролировать, хотите ли вы удалить строки, содержащие по крайней мере 1 NaN или все NaN значения, установив параметр how в методе dropna .

как :

  • any : если присутствуют какие-либо значения NA, отбросьте эту метку
  • all : если все значения равны NA, отбросьте эту метку

Это приведет только к удалению последней строки из набора данных, так как how=all удалит строку только в том случае, если все значения в ней отсутствуют.

Аналогично, чтобы удалить столбцы, содержащие пропущенные значения, просто установите axis=1 в методе dropna .

Заполнение Пропущенных значений

Возможно, это не лучший подход для удаления строк, содержащих пропущенные значения, если таких строк много. Они могут содержать ценные данные в других столбцах, и мы не хотим искажать данные в сторону неточного состояния.

В этом случае у нас есть несколько вариантов присвоения соответствующих значений. Наиболее распространенные из них перечислены ниже:

  • Заполните NA средним значением, Медианой или режимом данных
  • Заполните NA постоянным значением
  • Прямая заливка или обратная заливка
  • Интерполяция данных и ИМЕНИ файла

Давайте пройдемся по ним один за другим.

Заполните отсутствующие значения фрейма данных столбцами Mean, Median и Mode

Начнем с метода fillna () . Он заполняет помеченные NA значения значениями, которые вы предоставляете методу.

Например, вы можете использовать функции .median() , .mode() и .mean() для столбца и указать их в качестве значения заполнения:

Теперь, если зарплата отсутствует в строках человека, для заполнения этого значения используются среднее значение, режим или медиана. Таким образом, вы не исключаете этих людей из набора данных, а также не искажаете значения заработной платы.

Хотя этот метод не идеален, он позволяет вводить значения, которые не влияют на общий набор данных, поскольку независимо от того, сколько средних вы добавляете, среднее остается неизменным.

Заполните недостающие значения фрейма данных Константой

Вы также можете решить заполнить отмеченные NA значения постоянным значением. Например, вы можете ввести специальную строку или числовое значение:

По крайней мере, эти значения теперь являются фактическими значениями, а не na или NaN .

Прямое Заполнение Отсутствующих Значений Фрейма Данных

Этот метод заполнит пропущенные значения первым не пропущенным значением, которое встречается перед ним:

Обратное Заполнение Отсутствующих Значений Фрейма Данных

Этот метод будет заполнять пропущенные значения первым не пропущенным значением, которое появляется после него:

Заполните недостающие значения фрейма данных интерполяцией

Наконец, этот метод использует математическую интерполяцию, чтобы определить, какое значение было бы на месте пропущенного значения:

Вывод

Очистка и предварительная обработка данных – это очень важная часть каждого анализа данных и каждого проекта в области науки о данных.

В этой статье мы рассмотрели несколько методов обработки пропущенных данных, которые включали настройку пропущенных значений данных и вменение пропущенных значений данных с использованием различных методов, включая среднее значение, медиану, режим, постоянное значение, прямое заполнение, обратное заполнение и интерполяцию.

Источник

Читайте также:  Стоматолог сказал что не чищу зубы
Оцените статью