Рубрики
Без рубрики

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

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

Автор оригинала: Hassan Saeed.

Вступление

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

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

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

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

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

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

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

First Name,Gender,Salary,Bonus %,Senior Management,Team
Douglas,Male,97308,6.945,TRUE,Marketing
Thomas,Male,61933,NaN,TRUE
Jerry,Male,NA,9.34,TRUE,Finance
Dennis,n.a.,115163,10.125,FALSE,Legal
,Female,0,11.598,,Finance
Angela,,,18.523,TRUE,Engineering
Shawn,Male,111737,6.414,FALSE,na
Rachel,Female,142032,12.599,FALSE,Business Development
Linda,Female,57427,9.557,TRUE,Client Services
Stephanie,Female,36844,5.574,TRUE,Business Development
,,,,,

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

df = pd.read_csv('out.csv')
df

Это приводит к:

оригинальный фрейм данных панды

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

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

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

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

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

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

# This means that in Salary column, 0 is also considered a missing value.
# And 'na' is considered a missing value in the Team column.
df = pd.read_csv('out.csv', na_values={"Salary" : [0], "Team" : ['na']})
df

Это приводит к:

индивидуальный df

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

missing_values = ["n.a.","NA","n/a", "na", 0]
df = pd.read_csv('out.csv', na_values = missing_values)
df

Это приводит к:

глобальные недостающие значения панды

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

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

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

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

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

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

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

# Drops all rows with NaN values
df.dropna(axis=0,inplace=True)

Это приводит к:

drop nan values панды

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

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

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

как : {‘много’, ‘все’}

  • any : если присутствуют какие-либо значения NA, отбросьте эту метку
  • all : если все значения равны NA, отбросьте эту метку
df.dropna(axis=0,inplace=True, how='all')

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

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

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

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

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

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

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

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

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

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

# Using median
df['Salary'].fillna(df['Salary'].median(), inplace=True)
  
# Using mean
df['Salary'].fillna(int(df['Salary'].mean()), inplace=True)
  
# Using mode
df['Salary'].fillna(int(df['Salary'].mode()), inplace=True)

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

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

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

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

df['Salary'].fillna(0, inplace=True)

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

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

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

df['Salary'].fillna(method='ffill', inplace=True)

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

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

df['Salary'].fillna(method='bfill', inplace=True)

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

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

df['Salary'].interpolate(method='polynomial')

Вывод

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

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