Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

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

Возможно ли это сделать используя только pandas?

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

A tutorial on missing value in Pandas and how to use the built-in methods to handle them

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

The real-world data is rarely clean and homogeneous. In particular, many interesting datasets will have some amount of values missing.

In this article, we will discuss how missing value is represented in Pandas, how to deal with other characters representations and Pandas built-in methods for handling missing values.

  • Missing values in Pandas
  • Dealing with other characters representations
  • Handling missing values

Introduction

Dealing with missing data is part and parcel of any data science workflow. Common methods used to deal with missing data includes (a) ignore the missing data, (b) drop records with missing data or (c) fill the missing data. In this article we will examine various methods to fill missing data with Pandas library using a toy dataset containing fruit prices over 4 days in January 2021.

Let’s generate our toy dataset.

In this dataset there are 4 records with missing values denoted by “NaN’ and the price of apples are generally lower than the price of mangoes.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Image by Author

Общее замечание

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

Конкретно в этом вопросе

Для категориальных признаков корреляцию с бинарным признаком можно подсчитать с помощью коэффициента V Крамера:

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

One important info missing from the other answers is that both combine_first and fillna match on index, so you have to make the indices of match across the DataFrames for these methods to work.

Oftentimes, there’s a need to match on some other column(s) to fill in missing values. In that case, you need to use set_index first to make the columns to be matched, the index.

df1 = df1. set_index(cols_to_be_matched). fillna(df2. set_index(cols_to_be_matched)). reset_index()

df1 = df1. set_index(cols_to_be_matched). combine_first(df2. set_index(cols_to_be_matched)). reset_index()

Another option is to use merge:

The idea here is to left-merge and by sorting the columns (we use » as the suffix for columns from df2 since it’s the character with the lowest Unicode value), we make sure the same column values end up next to each other. Then use bfill horizontally to update df1 with values from df2.

Suppose you had df1:

C1 C2 C3 C4
0 1 a 1. 0 0
1 1 b NaN 1
2 2 b NaN 2
3 2 b NaN 3

C1 C2 C3
0 1 b 2
1 2 b 3

and you want to fill in the missing values in df1 with values in df2 for each pair of C1-C2 value pair. Then

C1 C2 C3 C4
0 1 a 1. 0 0
1 1 b 2. 0 1
2 2 b 3. 0 2
3 2 b 3. 0 3

Вступление

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

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

Вот почему в этой статье мы обсудим, как обрабатывать отсутствующие
данные в Pandas 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,na,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

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

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

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

Настройка отсутствующих значений данных

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

  • Значение 0 в столбце Salary
  • Значение na в столбце Team

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

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

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

Выбор реализации зависит от характера набора данных.

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

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

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

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

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

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

inplace = True вносит все изменения в существующий DataFrame не
возвращая новый. Без него вам пришлось бы переназначить DataFrame
самому себе.

axis указывает, работаете ли вы со строками или столбцами: 0 —
строки, а 1 — столбцы.

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

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

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

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

Заполнение недостающих значений

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

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

  • Заполните NA средним, медианным или режимом данных
  • Заполните NA постоянным значением
  • Прямое заполнение или обратное заполнение Нет данных
  • Интерполировать данные и заполнить NA

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

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

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

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

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

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

Заполните отсутствующие значения DataFrame константой

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

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

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

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

Обратное заполнение отсутствующих значений фрейма данных

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

Заполните отсутствующие значения DataFrame с помощью интерполяции

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

Заключение

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

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

Fill with Mean / Median of Column

We can fill the missing prices with mean or median price of the entire column.

price. mean() and df. price. median() returns the mean (1. 975) and median (2. 0) prices respectively. The. fillna() method imputes the missing prices with the given mean or median value.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Left: missing prices imputed with mean. Right: missing prices imputed with median. Image by Author

These prices may seem too high for price of apples and too low for prices of mangoes, therefore we may not want to impute prices of apples with the mean (or median) prices across all fruits. Instead, we may like to impute missing price of apples with mean (or median) price of only apples and do the same for mangoes. This brings us to the next method of filling missing values with mean (or median) within a specific group.

Fill with Mean / Median of Group

Lets’ break down the the above code into two steps.

Step1: Calculate the mean price for each fruit and returns a series with the same number of rows as the original DataFrame. The mean price for apples and mangoes are 1. 00 and 2. 95 respectively.

Step 2: Fill the missing values based on the output of step 1.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Forward Fill

Forward fill, also known as “ffill” in short, propagates the last valid observation forward along the selected axis of the DataFrame (down the column in our example).

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

We can limit the number of rows the last valid observation is propagated by using the limit argument. The below example shows that propagation is limited to only 1 step after the last valid observation. Missing price for apple on 2021-01-03 is not filled as it is 2 steps after the last valid observation.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Forward filling replaces the missing price for mangoes on 2020–01–01 with the price of apples on 2021–01–04. This does not make sense as it is not an apple to apple comparison (no pun intended). Therefore, we may want to apply forward fill separately for each fruit. We can do so by using forward fill with pandas groupby method.

Forward Fill within Groups

Forward fill can be used in conjunction with groupby to perform forward filling within specific groups.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Notice that the missing price of mango on 2021–01–01 is not filled by the price of apple on 2021–01–04 now as apples and mangoes are now seen as different groups. Similar to previous example, we can also set the limit parameter to limit the ffill propagation.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Back Fill

Back fill also known as “bfill” in short is the opposite of forward fill. The first valid observation after a “NaN” value is identified and propagated backwards along the selected axis (up the column in our example).

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Similarly we can also limit the number of rows the valid observation is propagated using the limit parameter.

Back Fill within Groups

Similar to forward fill, we can also perform back fill within specific groups only and limit its propagation.

Combining FFill and BFill

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Interpolate

Linear interpolation assumes that the values are equally spaced. The missing values for apple on 2021–01–02 and 2021–01–03 are filled with 0. 933 and 1. 067 where prices are increasing at interval of 0. 133.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Using linear interpolation in this manner to fill missing price for mangoes on 2021–01–01 does not make sense as we are performing interpolation base on price of apples on 2021–01–04 and price of mangoes on 2021–01–02. Let’s try to perform interpolation separately for each fruit.

Interpolate within Groups

The price of mango on 2021–01–01 is “Nan” as there are insufficient data points to perform interpolation. Linear interpolation requires at least 2 known data point, however there are no data point available for mangoes before 2021–01–01.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Assuming that prices of mangoes is the same on 2021–01–01 and 2021–01–02, we can fill the missing price using back fill. Let’s perform both interpolation and back fill in sequence by chaining both methods together.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Fill value based on conditions

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

First we will need to identify which dates are weekends and weekdays by creating a boolean column where True indicates weekdays and False indicates weekends.

Then we identify the mean price for each fruit

Finally we fill the missing values based on the given conditions pandas. where() method.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Missing values in Pandas

  • A mask that globally indicates missing values.
  • A sentinel value that indicates a missing entry.

In the mask approach, it might be a same-sized Boolean array representation or use one bit to represent the local state of missing entry.

In the sentinel value approach, a tag value is used for indicating the missing value, such as NaN (Not a Number), null or a special value which is part of the programming language.

Pandas use sentinels to handle missing values, and more specifically Pandas use two already-existing Python null value:

  • the Python None object.
  • the special floating-point NaN value,

Python None object

The first sentinel value used by Pandas is None, a Python ‘object’ data that is most often used for missing data in Python code. Because it is a Python object, None cannot be used in any arbitrary NumPy/Pandas array, but only in arrays with data type ‘object’.

import numpy as npimport pandas as pd

That will output

The use of Python object in an array also means that you will generally get an error if you perform aggregations like sum() or min().

Python floating-point NaN value

The second sentinel value used by Pandas is NaN, is acronym for Not a Number and a special floating-point value use the standard IEEE floating-point representation.

Keep in mind that NaN is specifically a floating-point value; there is no equivalent value for integers, strings or other types. And you should be aware that regardless of the operations, the result of arithmetic with NaN will be another NaN. For example

Will all output NaN. NumPy does provide some special aggregations that will ignore the missing data, such as nansum() , nanmin() , and nanmax().

None and NaN in Pandas

Pandas is built to handle the None and NaN nearly interchangeably, converting between them where appropriate:

0 1. 01 NaN2 2. 03 NaNdtype: float64

For types that don’t have an available sentinel value, Pandas automatically type-casts when NaN values are present.

For example, let’s create a Panda Series with dtype=int.

x = pd. Series(range(2), dtype=int)x0 01 1dtype: int64

If we set a value in an integer array to np. nan, it will automatically be upcast to a floating-point type to accommodate the NaN:

0 NaN1 1. 0dtype: float64

Dealing with other characters representations

Not all missing values come in nice and clean np. nan. If we know what kind of characters used as missing values in the dataset, we can handle them while creating the DataFrame using na_values parameter:

When the DataFrame is already created, we can use pandas replace() function to handle these values:

Detecting missing values

Pandas has two useful methods for detecting missing values: isnull() and notnull(). Either one will return a Boolean mask over the data. For example:

isnull() returns a Boolean same-sized DataFrame indicating if values are missing

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. isnull()

notnull() returns a Boolean same-sized DataFrame which is just opposite of isnull()

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. notnull()

When the dataset is large, you can count the number of missing values instead.

isnull(). sum() returns the number of missing values for each column (Pandas Series)

A 0B 1C 0D 1E 0F 1G 0dtype: int64

isnull(). sum(). sum() returns the total number of missing values

Dropping missing data

dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)

  • axis: 0 for row and 1 for column
  • how: ‘any’ for dropping row or column if any NaN values are present. ‘all’ to drop row of column if all values are NaN.
  • thresh: require that many non-NaN values
  • subset: array-like value. Labels along other axis to consider, e.g. if you are dropping rows these would be a list of columns to include.
  • inplace: If True, do operation inplace and return None.

To recap, here is the DataFrame df we are using

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

To drop row if any NaN values are present:

dropna(axis = 0)

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. dropna(axis = 0)

To drop column if any NaN values are present:

dropna(axis = 1)

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. dropna(axis = 1)

dropna(axis = 0, thresh = 6)

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. dropna(axis = 0, thresh = 6)

Replacing missing values

Data is a valuable asset so we should not give it up easily. Also, machine learning models almost always tend to perform better with more data. Therefore, depending on the situation, we may prefer replacing missing values instead of dropping.

fillna(value=None, method=None, axis=None, inplace=False)

  • value: value to use to replace NaN
  • method: method to use for replacing NaN. method=’ffill’ does the forward replacement. method=’bfill’ does the backword replacement.
  • axis: 0 for row and 1 for column.
  • inplace: If True, do operation inplace and return None.

To recap, here is the DataFrane df we are using

To replace all NaN values with a scalar

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. fillna(value=10)

To replaces NaN values with the values in the previous row.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. fillna(axis=0, method=’ffill’)

To replace NaN values with the values in the previous column.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

output of df. fillna(axis=1, method=’ffill’)

The same, you can also replace NaN values with the values in the next row or column.

# Replace with the values in the next rowdf. fillna(axis=0, method=’bfill’)# Replace with the values in the next columndf. fillna(axis=1, method=’bfill’)

The other common replacement is to replace NaN values with the mean. For example to replace NaN values in column B with the mean.

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Part 1 — Missing Data

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

This tutorial explains how to preprocess data using the pandas library. Preprocessing is the process of doing a pre-analysis of data, in order to transform them into a standard and normalized format.

  • missing values
  • data standardization
  • data normalization
  • data binning

In this tutorial we deal only with missing values.

You can download the source code of this tutorial as a Jupyter notebook from my Github Data Science Repository.

Import data

In this tutorial we will use the dataset related to Hepatitis, which can be downloaded from this link.

Firstly, import data using the pandas library and convert them into a dataframe. Through the head(10) method we print only the first 10 rows of the dataset

import pandas as pddf = pd. read_csv(‘hepatitis. csv’)df. head(10)

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Identify missing values

We note that the dataset presents some problems. For example, the column email is not available for all the rows. In some cases it presents the NaN value, which means that the value is missing.

In order to check whether our dataset contains missing values, we can use the function isna(), which returns if an cell of the dataset if NaN or not. Then we can count how many missing values there are for each column.

age 0sex 0steroid 1antivirals 0fatigue 1malaise 1anorexia 1liver_big 10liver_firm 11spleen_palpable 5spiders 5ascites 5varices 5bilirubin 6alk_phosphate 29sgot 4albumin 16protime 67histology 0class 0dtype: int64

age 0. 000000sex 0. 000000steroid 0. 645161antivirals 0. 000000fatigue 0. 645161malaise 0. 645161anorexia 0. 645161liver_big 6. 451613liver_firm 7. 096774spleen_palpable 3. 225806spiders 3. 225806ascites 3. 225806varices 3. 225806bilirubin 3. 870968alk_phosphate 18. 709677sgot 2. 580645albumin 10. 322581protime 43. 225806histology 0. 000000class 0. 000000dtype: float64

When dealing with missing values, different alternatives can be applied:

  • check the source, for example by contacting the data source to correct the missing values
  • drop missing values
  • replace the missing value with a value
  • leave the missing value as it is.

Drop missing values

  • remove rows having missing values
  • remove the whole column containing missing values We can use the dropna() by specifying the axis to be considered. If we set axis = 0 we drop the entire row, if we set axis = 1 we drop the whole column. If we apply the function df.dropna(axis=0) 80 rows of the dataset remain. If we apply the function df.dropna(axis=1), only the columns age, sex, antivirals, histology and class remain. However, removed values are not applied to the original dataframe, but only to the result. We can use the argument inplace=True in order to store changes in the original dataframe df (df.dropna(axis=1,inplace=True)).

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Now we can check whether there are still missing values for the column indirizzo.

Replace missing values

  • for numerical values replace the missing value with the average value of the column
  • for categorial values replace the missing value with the most frequent value of the column
  • use other functions

age int64sex objectsteroid objectantivirals boolfatigue objectmalaise objectanorexia objectliver_big objectliver_firm objectspleen_palpable objectspiders objectascites objectvarices objectbilirubin float64alk_phosphate float64sgot float64albumin float64histology boolclass objectdtype: object

Numeric columns

Firstly, we select numeric columns.

import numpy as npnumeric = df. select_dtypes(include=np. number)numeric_columns = numeric. columns

Then, we fill the NaN values of numeric columns with the average value, given by the df. mean() function.

Now, we can check whether the NaN values in numeric columns have been removed.

age 0. 000000sex 0. 000000steroid 0. 689655antivirals 0. 000000fatigue 0. 000000malaise 0. 000000anorexia 0. 000000liver_big 0. 000000liver_firm 0. 689655spleen_palpable 0. 689655spiders 0. 689655ascites 0. 689655varices 0. 689655bilirubin 0. 000000alk_phosphate 0. 000000sgot 0. 000000albumin 0. 000000histology 0. 000000class 0. 000000dtype: float64

Categorial columns

We note that in dtypes the categorial columns are described as objects. Thus we can select the object columns. We would like to consider only boolean columns. However the object type includes also the column class, which is a string. We select all the object columns, and then we remove from them the column class. Then we can convert the type of the result to bool.

Now we can replace all the missing values for booleans with the most frequent value. We can use the mode() function to calculate the most frequent value. We use the fillna() function to replace missing values, but we could use also the replace(old_value,new_value) function.

Now our dataset does not contain any missing value.

age 0. 0sex 0. 0steroid 0. 0antivirals 0. 0fatigue 0. 0malaise 0. 0anorexia 0. 0liver_big 0. 0liver_firm 0. 0spleen_palpable 0. 0spiders 0. 0ascites 0. 0varices 0. 0bilirubin 0. 0alk_phosphate 0. 0sgot 0. 0albumin 0. 0histology 0. 0class 0. 0dtype: float64

Interpolation

Another solution to replace missing values involves the usage of other functions, such as linear interpolation. In this case, for example, we could replace a missing value over a column, with the interpolation between the previous and the next ones. This can be achieved through the use of the interpolate() function.

Since we have already managed all the missing values, we reload the dataset.

We select only numeric columns.

numeric = df. select_dtypes(include=np. number)numeric_columns = numeric. columnsdf. head(10)

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Now we can apply the interpolate() function to numeric columns, by setting also the limit direction to forward. This means that the linear interpolation is applied starting from the first row until the last one.

For example, in line 6 the column bilirubin, which was NaN before the interpolation, now assumes the value 0. 95, which is the interpolation between 0. 90 (line 4) and 1. 00 (line 6).

Какие есть стратегии заполнения пустых значений? Как и когда их стоит применять?

Summary

In this tutorial we have seen one of the aspects of data preprocessing, which is dealing with missing data. Missing data can alter the data analysis process, thus they must be managed.

Three strategies can be used to deal with missing data:

  • drop missing data: this can be done when the dataset has a small number of missing data
  • replace missing data with other values, such as the mean or the most frequent value
  • leave missing data as they are.

Conclusion

  • Fillna
  • Forward Fill
  • Back Fill
  • Interpolation

The choice of the filling method depends on the assumptions and the context of the problem. For example, filling the missing values of mangoes with mean price of apples and mangoes may not be a good idea as apples and mangoes have rather different prices in our toy dataset.

We also see how to use each of this methods in conjunction with pandas. groupby() method to fill missing values for each group separately.