Автор оригинала: Ilyaas Lunat.
При работе с данными есть один навык, которым вы должны овладеть, и это очистка данных. Очень редко у вас будут чистые данные для работы. Итак, вам придется научиться очищать данные.
В этом посте я расскажу вам, как справиться с очисткой данных в Python с помощью библиотеки Pandas. После прочтения этого поста вы будете оснащены инструментами, необходимыми для этого.
Чтобы помочь с объяснениями, я создам пример фрейма данных, который поможет нам понять.
# import libraries import pandas as pd import numpy as np # Create dictionary dictionary = {'Name':['Alex', 'Mike', 'John', 'Dave', 'Joey'], 'Height(m)': [1.75, 1.65, 1.73, np.nan, 1.82], 'Test Score':[70, np.nan, 84, 62, 73]} # Convert dictionary to dataframe df = pd.DataFrame(dictionary)
выход:
Проверка пропущенных значений
Первое, что вам нужно при очистке данных, – это проверить наличие пропущенных значений. Это можно легко сделать, используя функцию isnull в паре с функцией sum.
df.isnull().sum()
выход:
Из выходных данных видно, что у нас есть 2 нулевых значения. Один в колонке ” Высота(м)” и один в колонке “Тестовый балл”.
Работа с пропущенными значениями
Теперь, когда мы выяснили, где находятся недостающие значения, мы можем иметь с ними дело. Есть несколько способов справиться с пропущенными значениями. Конечно, вы можете просто оставить недостающие значения в покое, но это не лучший вариант, поэтому давайте посмотрим, как мы можем с ними справиться.
Первое, что вы можете сделать, это заполнить недостающие значения словом или символом. Примером этого может служить замена отсутствующих данных на”*”.
Если вы хотите заполнить все значения в фрейме данных, то мы используем функцию ‘fillna’
df = df.fillna('*')
выход:
Если вы хотите заполнить значения для определенного столбца, например столбца “Тестовый балл”, мы добавим имя столбца в наш код, как показано ниже:
df['Test Score'] = df['Test Score'].fillna('*')
выход:
- Второе, что вы делаете, – это заменяете его средним. Это может включать в себя значение, если это число, или режим, если это слово.
df['Test Score'] = df['Test Score'].fillna(df['Test Score'].mean())
выход:
Мы также можем использовать функцию интерполяции, чтобы заполнить недостающие значения для числа. Это будет принимать среднее значение числа выше и ниже пропущенного значения в кадре данных.
df['Test Score'] = df['Test Score'].fillna(df['Test Score'].interpolate())
выход:
Это очень мощная функция, так как она имеет множество методов заполнения данных и множество других функций, которые мы не будем рассматривать в этом посте.
- Последнее, что вы можете сделать, это удалить недостающие строки данных. Мы можем удалить все строки с отсутствующими данными, как показано ниже
df= df.dropna()
выход:
Или мы можем удалить строки с отсутствующими данными в определенном столбце, например в столбце высота.
df['Height(m)']= df['Height(m)'].dropna()
выход:
Работа с нестандартными пропущенными значениями
Иногда пропущенные значения в наших данных могут не всплывать, когда мы проводим проверку на наличие пропущенных значений. При проверке пропущенных значений функция isnull() подбирает только “Nan”, а не другие типы пропущенных значений, такие как тире ( ” -“) или даже “na”. Я создам новый фрейм данных, чтобы показать это.
# dictionary of lists dictionary = {'Name':['Alex', 'Mike', 'John', 'Dave', 'Joey'], 'Height(m)': [1.75, 1.65, '-', 'na', 1.82], 'Test Score':[70, np.nan, 8, 62, 73]} # creating a dataframe from list df = pd.DataFrame(dictionary)
выход:
Как мы видим, у нас есть 3 пропущенных значения. Два в колонке ” Высота(м)” и один в колонке “Тестовый балл”. Но когда мы запускаем функцию df.isnull (), мы видим, что выбирается только одно из нулевых значений.
df.isnull()
выход:
Мы можем справиться с этим, сначала преобразовав его в ” NaN ” с помощью функции replace, а затем разобраться с пропущенными значениями так, как мы хотим.
df = df.replace(['-','na'], np.nan)
выход:
Данные в неправильном формате
Иногда нам приходится иметь дело с данными в неправильном формате. Например, в столбце “Тестовый балл” вместо числа может быть слово.
# dictionary of lists dictionary = {'Name':['Alex', 'Mike', 'John', 'Dave', 'Joey'], 'Height(m)': [1.75, 1.65, 1.54, 1.87, 1.82], 'Test Score':[70, 'yes', 8, 62, 73]} # creating a dataframe from list df = pd.DataFrame(dictionary)
выход:
Как вы можете видеть, в столбце оценка теста есть запись без номера. С этим можно справиться так же, как мы поступили с нестандартными пропущенными значениями. Мы используем функцию replace, чтобы изменить ее на отсутствующее значение или “NaN”. Тогда мы можем иметь дело с недостающими значениями, как мы хотим.
Вы также можете создать цикл для выполнения всех записей столбца “Тестовый балл”, чтобы превратить каждое не-число в нулевое значение. Но из соображений простоты я решил не включать это.
Вывод
Для этого поста я рассказал об основах очистки данных в Python, и это должно помочь вам начать работу с очисткой данных в Python с помощью библиотеки pandas. В будущем я сделаю более подробный пост, посвященный более продвинутым методам очистки данных. Надеюсь, вам понравилось это читать, и обязательно следите за моими предстоящими постами.