Руководство по использованию метода fillna в Pandas для работы с отсутствующими данными в DataFrame
Добро пожаловать в наше подробное руководство по использованию метода Pandas fillna
! Обработка отсутствующих данных является важным шагом в процессе очистки данных. Это обеспечивает надежность, точность и консистентность ваших аналитических результатов. К счастью, использование метода Pandas .fillna()
может сделать работу с такими неприятными значениями, как “NaN” или “null”, очень простой. В этом руководстве мы подробно рассмотрим .fillna()
, охватывая его параметры, использование и различные способы, которые помогут вам сохранить целостность ваших данных.
К концу этого руководства вы узнаете следующее:
Что такое метод Pandas
.fillna()
и почему он важен для обработки недостающих данныхПодробные описания и варианты использования каждого параметра
.fillna().
Различные способы заполнения недостающих данных с помощью
.fillna()
, например прямое заполнение или обратное заполнение.Ответы на часто задаваемые вопросы об использовании
.fillna()
Хотите вместо этого узнать, как удалить недостающие данные? Ознакомьтесь с моим полным руководством по методу Dropna Pandas, который обеспечивает огромную гибкость при удалении недостающих данных.
Оглавление
Понимание метода fillna() в Pandas
Прежде чем начать использовать метод .fillna()
библиотеки Pandas, давайте на момент остановимся и разберемся, как работает этот метод. В следующем блоке кода детализированы различные доступные параметры метода:
Давайте более подробно рассмотрим параметры и аргументы по умолчанию, используя метод .fillna()
. В таблице ниже приведено разбиение каждого из параметров этого метода, а также их значения по умолчанию и принимаемые значения:
value
Указывает значения, которые будут использоваться для заполнения недостающих данных.
None
Scalar, dict, Series, or DataFrame
method
Указывает метод заполнения недостающих данных (заполнение вперед или заполнение назад).
None
‘pad’ or ‘ffill’ (forward fill), ‘bfill’ or ‘backfill’ (backward fill)
axis
Определяет ось, по которой заполняются недостающие значения (строки или столбцы)
0
0 (index/rows) or 1 (columns)
inplace
Если True, недостающие данные будут заполнены на месте без создания нового DataFrame.
False
True, False
limit
Устанавливает максимальное количество последовательных пропущенных значений для заполнения.
None
Positive integer value
downcast
При необходимости предоставьте словарь для преобразования заполненных значений в типы данных.
None
Dictionary in the form {‘column name’: ‘datatype’} or {‘column name’: ‘infer’} for inferring datatype from the other values
Теперь, когда вы ознакомились с различными параметрами метода .fillna()
, давайте начнем изучение того, как использовать этот метод.
Загрузка образца DataFrame Pandas
Давайте посмотрим на DataFrame, который мы будем использовать в этом руководстве. Я намеренно сделал набор данных простым. По моему опыту, когда изучаешь что-то новое, лучше всего начинать с простого и постепенно переходить к более сложным случаям использования.
Давайте загрузим DataFrame, передав словарь данных:
Мы видим, что у нас есть четыре столбца, каждый из которых содержит ряд различных пропущенных значений. Теперь давайте рассмотрим, как использовать метод .fillna()
для заполнения пропущенных данных во всем DataFrame.
Использование Pandas fillna() для заполнения пропущенных значений в одном столбце DataFrame
Метод .fillna()
в Pandas может быть применен к отдельному столбцу (или, точнее, к Pandas Series) для заполнения всех отсутствующих значений заданным значением. Чтобы заполнить отсутствующие значения, вы можете просто передать значение в параметр value=
Это предоставляет вам огромную гибкость в плане как вы хотите заполнить ваши пропущенные значения. Давайте рассмотрим несколько из этих способов, включая заполнение нулем, другим постоянным значением, средним по столбцу, или строкой.
Использование Pandas fillna() для заполнения 0
Чтобы заполнить все пропущенные значения в столбце Pandas нулями, вы можете использовать .fillna(0)
и применить его к столбцу. Давайте посмотрим, как мы можем заполнить все отсутствующие значения в столбце Years
В приведенном выше коде мы применили метод .fillna()
к столбцу Years
. Обратите внимание, что здесь мы переназначили столбец, тем самым перезаписав оригинальный объект Pandas Series.
Использование Pandas fillna() для заполнения постоянным значением
Чтобы заполнить все пропущенные значения в колонке Pandas постоянным значением, мы просто передаем это значение в параметр value=
метода .fillna()
. Значение будет пытаться соответствовать типу данных колонки.
Давайте посмотрим, как мы можем заполнить все пропущенные значения в столбце Age
значением
В приведенном выше примере мы заполнили все пропущенные значения в столбце 'Age'
значением 99. Однако на практике мы редко будем действовать именно так для восстановления отсутствующих данных. Давайте рассмотрим, как можно заменить пропущенные значения на среднее (или среднее арифметическое) значение столбца.
Использование Pandas fillna() для заполнения средним значением
Чтобы заполнить все пропущенные значения столбца средним значением этого столбца, вы можете использовать метод .fillna()
с средним значением этого столбца. Давайте посмотрим, как мы можем использовать метод Pandas .mean()
для замены отсутствующих значений на среднее:
В приведенном выше блоке кода, вместо того чтобы передавать прямое значение, мы используем метод .mean()
к столбцу. Это позволяет коду быть универсальным и адаптивным по мере изменения данных.
Что замечательно в этом подходе, так это то, что он позволяет нам использовать любые другие типы вычисляемых значений, такие как медиана или мода набора данных.
Использование Pandas fillna() для заполнения строкой
Аналогично, мы можем передать строку, чтобы заполнить все отсутствующие значения данной строкой. Это работает так же, как передача константы. Давайте посмотрим, как мы можем передать строку 'Missing'
, чтобы заполнить все отсутствующие значения в столбце 'Name'
Это работает так же, как и наши предыдущие примеры. Обратите внимание, что если мы передадим строку в столбец, который является числовым (таким как целое число или число с плавающей точкой), то тип данных всего столбца изменится на object
Использование Pandas fillna() для заполнения пропущенных значений во всем DataFrame
Чтобы заполнить пропущенные значения во всем DataFrame Pandas, мы можем просто передать значение заполнения в параметр value=
метода .fillna()
. Метод попытается сохранить тип данных исходного столбца, если это возможно.
Давайте посмотрим, как мы можем заполнить все пропущенные значения в DataFrame значением
Мы можем видеть в приведенном выше коде, что при передаче одного значения в метод .fillna()
, это значение передается в каждый столбец. Примечательно, что типы данных корректируются так, чтобы они соответствовали типам данных столбца.
Использование Pandas fillna() для заполнения пропущенных значений в определенных столбцах DataFrame
До сих пор мы рассматривали заполнение отсутствующих данных либо для одного столбца за раз, либо для всего DataFrame. Pandas позволяет передавать словарь пар столбец-значение для заполнения отсутствующих значений в идентифицированных столбцах определенными значениями
Это может быть чрезвычайно полезным, когда вы хотите очистить отсутствующие данные по всему DataFrame, без необходимости многократного вызова метода.
Давайте посмотрим, как мы можем использовать этот подход для заполнения пропущенных значений различными значениями:
В приведенном выше блоке кода мы передали словарь сопоставлений столбцов, в которых мы хотели заполнить отсутствующие данные, и значения, которыми мы хотели их заполнить.
Обратите внимание, что мы использовали несколько различных подходов: строку, среднее значение столбца и постоянное значение.
Аналогичным образом, пропущенный нами столбец (Пол) был игнорирован. Такой подход позволяет вам писать чистый код, без необходимости последовательного вызова метода .fillna()
Использование Pandas fillna() для обратного или прямого заполнения данных
Метод .fillna()
в Pandas также позволяет заполнять пропуски в ваших данных, используя предыдущие или следующие наблюдения. Этот процесс называется прямым заполнением или обратным заполнением данных.
При выполнении этого у нас есть следующие варианты для передачи в параметр method=
'ffill'
или'pad'
будут использовать предыдущее значение для заполнения пропусков в данных.'bfill'
или'backfill'
будут использовать следующее значение для заполнения пропущенных значений в пробеле.
Давайте посмотрим, как мы можем использовать это для заполнения пропущенных значений в столбце 'Years'
В приведенном выше блоке кода мы применяем .fillna(method='ffill')
к столбцу 'Years'
. Обратите внимание, что все пропуски заполняются последним значением, которое было перед пропуском. Этот подход особенно полезен для временных рядов.
Если вы хотите заполнить пропуски в данных с помощью интерполированных значений, вы можете использовать метод .interpolate()
, который можно применять для заполнения отсутствующих данных путем расчета того, какими должны быть эти значения.
Ограничение количества последовательных пропущенных данных, заполняемых с помощью Pandas fillna()
При использовании параметра method=
метода .fillna()
, вы можете не захотеть заполнять весь пробел в ваших данных. Используя параметр limit=
, вы можете указать максимальное количество последовательных пропущенных значений, которые будут заполнены вперёд или назад
Давайте посмотрим, как мы можем использовать этот параметр, чтобы ограничить количество значений, заполняемых в пропуске в наших данных:
В приведенном выше примере мы использовали тот же метод для заполнения пропущенных данных в нашем наборе данных. Однако мы указали, что хотим заполнить максимум две пропущенные записи, передав параметр limit=2
. Мы видим, что третье отсутствующее значение в промежутке не заполнено.
Для работы этого параметра передаваемое значение должно быть больше 0 и не равно None
Использование Pandas fillna() с группировкой и преобразованием
В этом разделе мы рассмотрим использование метода .fillna()
в библиотеке Pandas для заполнения пропущенных данных в различных категориях. Помните наш предыдущий пример, когда мы заполнили отсутствующие данные в столбце Возраст, используя среднее значение по этому столбцу.
Чтобы сделать заполненные значения более репрезентативными, можно разделить данные по группам. Например, мы можем заполнить данные, предоставляя отсутствующие данные для каждой группы в колонке "Пол".
Для этого мы используем метод groupby в Pandas для расчета среднего возраста каждой группы, затем передаем эти значения обратно в DataFrame с использованием метода
В приведенном выше примере мы сначала вычислили средний возраст по полу и создали результирующий Series, в котором эти значения были сопоставлены с индексом. Затем мы использовали метод .fillna()
для передачи этого Series для заполнения всех отсутствующих данных.
Использование Pandas fillna() для заполнения недостающих данных на месте
До сих пор мы рассматривали использование метода .fillna()
в Pandas, присваивая либо сам DataFrame, либо объект Pandas Series самому себе.
Метод .fillna()
позволяет заполнить пропущенные значения на месте, установив параметр inplace=True
. На моем опыте, существует определенная степень споров о том, быстрее ли этот подход или более эффективен с точки зрения использования памяти.
Я предпочитаю выполнять операции, переназначая DataFrame/Series, поскольку это может использоваться более консистентно.
Давайте посмотрим, как мы можем заполнить отсутствующие значения на месте, используя метод .fillna()
Используя аргумент inplace=True
, нам не потребовалось переназначать столбец самому себе.
Часто задаваемые вопросы
Заключение
В этом подробном руководстве мы исследовали возможности метода fillna
в Pandas для работы с отсутствующими данными. Вкратце, мы рассмотрели следующее:
Важность обработки недостающих данных и роль метода Pandas
fillna
в этом процессе.Различные параметры метода
fillna
и их использование, такие как значение, метод, ось, место и предел.Примеры, демонстрирующие различные способы использования
fillna
, включая заполнение пропущенных значений константами, словарями, прямое заполнение, обратное заполнение и группировку в сочетании с преобразованием.
Помните, что эффективная обработка отсутствующих данных имеет решающее значение для обеспечения точности и согласованности вашего анализа данных. Не стесняйтесь обращаться к этому руководству, если вам нужна помощь или вдохновение при работе с отсутствующими данными в ваших будущих проектах. Удачи и счастливой очистки данных!
Чтобы узнать больше о методе .fillna()
библиотеки Pandas, ознакомьтесь с официальной документацией.
Last updated