Pandas: Замена NaN на нули

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

К концу этого урока вы научитесь:

  • Как использовать Pandas для замены значений NaN нулями для одного столбца, нескольких столбцов и всего DataFrame

  • Как использовать NumPy для замены значений NaN в кадре данных Pandas

  • Как заменить значения NaN в кадре данных Pandas на месте

Оглавление

Загрузка образца DataFrame Pandas

Чтобы следовать за учебником, я предоставил образец DataFrame Pandas. Чтобы загрузить DataFrame, мы импортируем Pandas с псевдонимом pd и передадим словарь в конструктор DataFrame(). Поскольку мы также захотим включить некоторые значения NaN, мы импортируем NumPy.

# Loading a Sample Pandas DataFrame
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Col_A': [1, 2, 3, np.NaN],
    'Col_B': [1, np.NaN, 3, 4],
    'Col_C': [1, 2, np.NaN, 4],
})

print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    NaN    2.0
# 2    3.0    3.0    NaN
# 3    NaN    4.0    4.0

В нашем распоряжении три колонки, каждая из которых содержит пропущенные данные.

Как заменить значения NaN нулями для одного столбца Pandas

Чтобы заменить все отсутствующие значения нулями в одном столбце DataFrame Pandas, мы можем применить метод .fillna() к столбцу. Функция позволяет вам передать значение, которым нужно заменить отсутствующие данные. В данном случае мы передаем значение 0.

# Replace NaN Values with Zeroes for a Single Pandas Column
import pandas as pd
import numpy as np

df = pd.DataFrame({'Col_A': [1, 2, 3, np.NaN], 'Col_B': [1, np.NaN, 3, 4], 'Col_C': [1, 2, np.NaN, 4]})

df['Col_A'] = df['Col_A'].fillna(0)

print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    NaN    2.0
# 2    3.0    3.0    NaN
# 3    0.0    4.0    4.0

В предыдущем коде мы переназначили столбец 'Col_A' самому себе. Переназначая его, мы применили метод .fillna(), передав 0 в аргумент. В следующем разделе вы узнаете, как заменить все пропущенные значения для нескольких столбцов.

Как заменить значения NaN нулями для нескольких столбцов Pandas

Для замены значений NaN на нули в нескольких столбцах DataFrame Pandas можно применить метод fillna к нескольким столбцам. Чтобы модифицировать несколько столбцов, мы можем передать список меток столбцов в селектор. Давайте посмотрим, как это выглядит:

# Replace NaN Values with Zeroes for Two Pandas Columns
import pandas as pd
import numpy as np

df = pd.DataFrame({'Col_A': [1, 2, 3, np.NaN], 'Col_B': [1, np.NaN, 3, 4], 'Col_C': [1, 2, np.NaN, 4]})

df[['Col_A', 'Col_B']] = df[['Col_A', 'Col_B']].fillna(0)

print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    0.0    2.0
# 2    3.0    3.0    NaN
# 3    0.0    4.0    4.0

В приведенном выше коде мы выбираем несколько столбцов, передавая список меток столбцов в селектор df[]. Затем мы можем применить метод fillna, передавая в него 0. Это заменяет все отсутствующие значения на 0 для нескольких столбцов.

Как заменить значения NaN нулями для таблицы данных Pandas

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

# Replace NaN Values with Zeroes for an Entire DataFrame
import pandas as pd
import numpy as np

df = pd.DataFrame({'Col_A': [1, 2, 3, np.NaN], 'Col_B': [1, np.NaN, 3, 4], 'Col_C': [1, 2, np.NaN, 4]})

df = df.fillna(0)

print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    0.0    2.0
# 2    3.0    3.0    0.0
# 3    0.0    4.0    4.0

В приведенном выше блоке кода мы переназначаем DataFrame самому себе, применяя метод fillna. Мы передаем значение 0, чтобы заменить все отсутствующие значения нулями.

Как заменить значения NaN нулями для таблицы данных Pandas на месте

Точно так же мы можем заменить все значения NaN в DataFrame Pandas на месте. Это позволяет нам не переназначать DataFrame самому себе. Это также делает код более эффективным, поскольку Pandas не будет создавать новый объект.

# Replace NaN Values with Zeroes for a DataFrame In Place
import pandas as pd
import numpy as np

df = pd.DataFrame({'Col_A': [1, 2, 3, np.NaN], 'Col_B': [1, np.NaN, 3, 4], 'Col_C': [1, 2, np.NaN, 4]})

df.fillna(0, inplace=True)

print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    0.0    2.0
# 2    3.0    3.0    0.0
# 3    0.0    4.0    4.0

В приведенном выше коде мы просто передаем inplace=True в качестве второго аргумента. Это модифицирует DataFrame непосредственно, заменяя все отсутствующие значения.

Как заменить значения NaN нулями в Pandas, используя NumPy для столбца

Благодаря тесной интеграции Pandas с NumPy, мы также можем использовать методы NumPy в DataFrame Pandas. Метод .replace() можно применять непосредственно к серии Pandas (или, точнее, к столбцу). Метод .replace() принимает два параметра:

  1. Значение для замены

  2. Значение, на которое нужно заменить

Давайте посмотрим, как это выглядит:

# Replace NaN Values with Zeroes for a Single Pandas Column with NumPy
import pandas as pd
import numpy as np

df = pd.DataFrame({'Col_A': [1, 2, 3, np.NaN], 'Col_B': [1, np.NaN, 3, 4], 'Col_C': [1, 2, np.NaN, 4]})

df['Col_A'] = df['Col_A'].replace(np.NaN, 0)
print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    NaN    2.0
# 2    3.0    3.0    NaN
# 3    0.0    4.0    4.0

В приведенном выше коде мы используем метод np.replace() для замены всех отсутствующих значений NaN на значение 0.

Как заменить значения NaN нулями в Pandas, используя NumPy для DataFrame

Аналогично, мы можем использовать метод .replace() из библиотеки NumPy, чтобы заменить значения NaN на нули во всем DataFrame Pandas. Для этого мы можем применить метод .replace() ко всему DataFrame, как показано ниже:

# Replace NaN Values with Zeroes for a DataFrame with NumPy
import pandas as pd
import numpy as np

df = pd.DataFrame({'Col_A': [1, 2, 3, np.NaN], 'Col_B': [1, np.NaN, 3, 4], 'Col_C': [1, 2, np.NaN, 4]})

df = df.replace(np.NaN, 0)

print(df)

# Returns:
#    Col_A  Col_B  Col_C
# 0    1.0    1.0    1.0
# 1    2.0    0.0    2.0
# 2    3.0    3.0    0.0
# 3    0.0    4.0    4.0

В приведенном выше коде мы используем метод .replace() ко всему DataFrame для замены отсутствующих значений.

Заключение

В этом уроке вы узнали, как использовать Pandas для замены значений NaN на нули. Вы научились делать это для одного столбца, нескольких столбцов и всего DataFrame с помощью метода Pandas fillna. Затем вы узнали, как использовать метод .replace() NumPy для того же для одного столбца и всего DataFrame.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с обучающими материалами ниже:

Last updated