Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Очистка данных — действительно сложная и утомительная работа. Некоторые высмеивают ?: 80% времени уходит на очистку данных. Звучит невероятно, но это действительно так!
Но это также и самая важная часть всего процесса анализа данных. В этом посте будет рассказано, как использовать библиотеку Pandas для обработки пропущенных значений.
Серия панд
Статьи Pandas были сериализованы для 12 статей и избранных статей в прошлом:
1- Иллюстрация механизма сортировки панд
2- Иллюстрация механизма ранжирования панд
3-Проиллюстрируйте механизм группировки панд
Общие функции
Когда в наших данных есть нулевые значения или отсутствующие значения, мы часто имеем дело с функциями: определение того, является ли это отсутствующим значением, непосредственное удаление отсутствующего значения, заполнение отсутствующего значения
- df.isnull(), df.notnull(): две функции являются обратными друг другу
- df.isna(): эквивалентно df.isnull()
- df.dropna(): удалить недостающие значения
- df.fillna(): заполнить пропущенные значения
Связанные концепции
Прежде всего, давайте представим несколько, возможно, расплывчатых концепций, связанных с Pandas или Python:
- Нулевое значение в pandas — это «» (непосредственно пара двойных кавычек); пустая строка: «», с пробелом между ними
- Отсутствующие значения относятся к NaN или NaT в DataFrame и к none или nan в Series.
- Когда нам нужно вручную указать отсутствующее значение, по умолчанию оно представлено None и np.nan.
Во-вторых, давайте посмотрим на ассоциацию None и NaN в Pandas:
- На момент нашего создания они одинаковы по умолчанию.
- Если мы укажем присвоение как None, оно все равно станет none в Series и будет отображаться в типе данных float64.
Данные моделирования
Чтобы объяснить, я смоделировал данные с отсутствующими и нулевыми значениями:
Отсутствуют значения в имени дня рождения, адресе, английском языке; в адресе также есть нулевые значения: непосредственно нажмите пробел, чтобы сгенерировать
Считываем данные в блокнот следующим образом: нулевые значения ничего не имеют, а пропущенные значения отображаются как NaN или NaT.
Просмотр отсутствующих значений
Две функции могут проверить, есть ли в данных пропущенные значения: isnull(), isna()
Просмотр отсутствующих значений для каждого местоположения
Места с пропущенными значениями представлены True
df.isnull() # 空值的位置标记为True
Проверьте каждый атрибут столбца на наличие отсутствующих значений.
df.isnull().any() # 只要有一个缺失值及为True
Посмотрите, сколько пропущенных значений существует для каждого атрибута столбца
df.isnull().sum() # 每个列属性的缺失值总数
⚠️ Использование isna() и isnull() одинаково:
Просмотр случая отсутствия пропущенного значения notnull()
Использование notnull() и isnull() полностью противоположно:
1. Проверьте ситуацию с каждым неотсутствующим значением, в настоящее время отсутствующее значение представлено False
2. Просмотр количества непропущенных значений для каждого атрибута столбца
отбросить пропущенные значения dropna
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
Параметр Описание
Конкретное объяснение параметров:
- ось: удалить строку или столбец, ось = 0 указывает направление индекса индекса, ось = 1 указывает столбец столбца, по умолчанию 0
- как: "все", "любые"; все: означает, что все строки или столбцы отсутствуют перед удалением (все), любые: означает удаление до тех пор, пока есть один (по крайней мере), случай по умолчанию
- thresh: сколько хотя бы появляется в строке или столбце, не будет удалено
- подмножество: удалить только подмножество указанных столбцов; не работать со строками или столбцами, которые не входят в подмножество
- inplace: указывает, следует ли создать новый DataFrame или удалить его непосредственно в исходных данных.
Для удобства объяснения сначала сгенерируем копию df1:
ось параметров
По умолчанию удаление выполняется с осью=0:
В дополнение к оси = 0 или оси = 1 вы также можете использовать оси = «индекс» или оси = «столбцы»:
параметр как
Существует два способа удаления:
- how="any": удалить хотя бы одно отсутствующее значение, метод по умолчанию
- как="все": все пропущенные значения удаляются
порог параметра
Параметр thresh означает: thresh=N, когда есть хотя бы N непропущенных значений, данные будут сохранены.
В следующем примере N=6 означает, что будут сохранены как минимум 6 непропущенных значений; данные с индексом 1 имеют два пропущенных значения, а индекс удаляется
Когда мы изменим на N = 7: пока есть строки с пропущенными значениями, они будут удалены
подмножество параметров
Использование представления подмножества указывает, что удаление выполняется подмножеством элементов. Может быть одна или несколько форм списка многократного использования
параметр на месте
Удаленные недостающие данные стоит ли сохранить новые данные как копию или изменить их непосредственно на исходные данные.
Если inplace не указан, по умолчанию сохраняется копия и создается новый фрейм данных.
Если указано значение True, исходные данные изменяются напрямую:
Отсутствующее значение заполнить fillna
Иногда при обработке данных мы можем удалить пропущенные значения напрямую, но иногда для целостности данных нам нужно заполнить пропущенные значения:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
Описание параметра
- значение: заполненное значение, которое может быть конкретным значением, формой словаря или значением, вычисленным функцией и т. д.
- ось: направление заполнения, ось=0 (строка), по умолчанию, ось=1 (столбец)
- метод: метод заполнения {'backfill', 'bfill', 'pad', 'ffill', None}, по умолчанию - None
- на месте: создавать ли новую копию или напрямую изменять исходные данные
- limit: количество пропущенных значений для заполнения
- downcast: понижение типа данных,
item-> dtype
Словарь, по возможности вниз, или строка“infer”
, попытается выполнить понижающее приведение к соответствующему типу равенства. Посмотрите на официальный сайт, чтобы объяснить, используйте меньше
downcast: указание item->dtype того, что нужно понизить, если это возможно, или строка «infer», которая будет пытаться понизить до соответствующего равного типа (например, float64 до int64, если возможно).
Данные моделирования
Смоделируйте другой фрагмент данных:
df2 = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list("ABCD"))
df2
значение параметра
Значение параметра — это значение, которое нам нужно заполнить, и существует множество форм:
Заполните форму словаря, ключами которого являются наши имена атрибутов столбцов:
Заполните его значением, вычисленным функцией:
ось параметров
Параметр оси используется для указания направления заполнения, по умолчанию ось = 0.
ограничение параметра
Ограничение параметра указывает максимальное количество пропущенных значений для заполнения: в следующем примере необходимо заполнить не более 2
метод параметра
Метод параметра указывает способ заполнения, этот параметрне может существовать одновременно со значением
- ffill, pad: заполнить предыдущим значением отсутствующего значения
- bfill, backfill: заполнить значение после пропущенного значения
bfill и backfill указывают, что следующее значение отсутствующего значения используется для заполнения позиции текущего отсутствующего значения: например, отсутствующее значение с индексом 0, за которым следует 3, может быть заполнено.
параметрInplace
Эффект аналогичен дропне, если добавить inplace=True, исходные данные будут изменены напрямую. Не так много введения, обычно мы используем False по умолчанию и не изменяем исходные данные напрямую.
параметр понижен
Чтобы объяснить использование downcast, на Stack Overflow был найден случай:
stackoverflow.com/questions/2…
Суммировать
Данные не всегда могут быть идеальными, и пропущенные значения встречаются очень часто. В этой статье дается подробное введение от просмотра пропущенных значений, удаления пропущенных значений до заполнения пропущенных значений, с акцентом на освоение использования dropna и fillna, в надежде помочь читателям.