Pandas replace() – Замена значений в DataFrame Pandas

В этом посте вы узнаете, как использовать метод .replace() Pandas для замены данных в вашем DataFrame. Метод DataFrame.replace() Pandas может быть использован для замены строки, значений и даже регулярных выражений (regex) в вашем DataFrame.

Обновление на 2023 год

Весь пост был переписан, чтобы сделать содержание более понятным и легким для восприятия. Теперь в учебнике также рассматривается параметр method=, а также предоставлена шпаргалка по использованию функции (см. ниже).

Быстрый ответ:

# Replace a Single Value
df['Age'] = df['Age'].replace(23, 99)

# Replace Multiple Values
df['Age'] = df['Age'].replace([23, 45], [99, 999])

# Also works in the Entire DataFrame
df = df.replace(23, 99)
df = df.replace([23, 45], [99, 999])

# Replace Multiple Values with a Single Value
df['Age'] = df['Age'].replace([23, 45, 35], 99)

# Using a Dictionary (Dict is passed into to_replace=)
df['Age'] = df['Age'].replace({23:99, 45:999})

# Using a Dictionary for Column Replacements (key:value = column:value)
df = df.replace({'Name': 'Jane', 'Age': 45}, 99)

Оглавление

Синтаксис метода замены Pandas

Метод .replace() в Pandas принимает множество различных параметров. Давайте рассмотрим их:

DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')

В приведенном ниже списке указано, что ожидают параметры метода .replace() и что они представляют:

  • to_replace=: принимает строку, список, словарь, регулярное выражение, int, float и т. д., и описывает значения для замены

  • value=: Значение для замены

  • inplace=: выполнять операцию на месте

  • limit=: максимальный размер промежутка для обратного или прямого заполнения

  • regex=: интерпретировать ли to_replace и/или значение как регулярное выражение

  • method=: метод, который следует использовать для замены

Давайте углубимся в то, как использовать этот метод, начав с загрузки образца DataFrame Pandas.

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

Чтобы начать, давайте сначала загрузим DataFrame в Pandas. Мы сделаем все максимально просто, чтобы было легче понять, что именно мы заменяем.

# Loading a Sample DataFrame
import pandas as pd
df = pd.DataFrame.from_dict({'Name': ['Jane', 'Melissa', 'John', 'Matt'],'Age': [23, 45, 35, 64],'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],'Gender': ['F', 'F', 'M', 'M']})
print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Jane   23     London      F
# 1  Melissa   45      Paris      F
# 2     John   35    Toronto      M
# 3     Matt   64    Atlanta      M

Давайте теперь погрузимся в то, как использовать метод, начиная с того, как заменить одно значение в данном столбце.

Замените одно значение в столбце DataFrame Pandas

Давайте научимся заменять отдельное значение в столбце Pandas. В приведенном ниже примере мы посмотрим, как заменить значение Jane на Joan. Для этого нам просто нужно передать значение, которое мы хотим заменить, в параметр to_replace=, а значение, на которое хотим заменить, — в параметр value=

# Replace a Single Value with Another Value Using Pandas .replace()
df['Name'] = df['Name'].replace(to_replace='Jane', value='Joan')
print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Joan   23     London      F
# 1  Melissa   45      Paris      F
# 2     John   35    Toronto      M
# 3     Matt   64    Atlanta      M

В приведенном выше блоке кода мы использовали метод .replace() непосредственно к столбцу, переназначив столбец сам на себя. Поскольку два параметра являются первым и вторым параметрами позиционно, нам на самом деле не нужно их указывать по имени

Замените несколько значений одним и тем же значением в кадре данных Pandas

Теперь вы можете захотеть заменить несколько значений на одно и то же значение. Сделать это также очень просто, используя метод .replace()

Конечно, вы можете просто запустить метод дважды, но есть гораздо более эффективный способ достичь этого. Здесь мы будем заменять London и Paris на Europe:

# Replace Multiple Values with Another Value Using Pandas .replace()
df['Birth City'] = df['Birth City'].replace(
    to_replace=['London', 'Paris'], 
    value='Europe')
print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Jane   23     Europe      F
# 1  Melissa   45     Europe      F
# 2     John   35    Toronto      M
# 3     Matt   64    Atlanta      M

В приведенном выше блоке кода мы передали список значений в параметр to_replace=. Это позволяет искать оба эти значения в столбце. Поскольку мы передали только одно значение в параметр value=, это значение используется для замены обоих других значений.

Теперь давайте посмотрим, как заменить несколько значений на другие в следующем разделе.

Замените несколько значений разными значениями в кадре данных Pandas

Как и в приведенном выше примере, вы можете заменить список из нескольких значений на список других.

Чтобы сделать это, вы можете передать список значений в параметр to_replace=, а также список такой же длины в параметр value=

В приведенном ниже примере мы заменим London на England и Paris на France:

# Replace Multiple Values with Different Values Using Pandas .replace()
df['Birth City'] = df['Birth City'].replace(
    to_replace=['London', 'Paris'], 
    value=['England', 'France'])

print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Jane   23    England      F
# 1  Melissa   45     France      F
# 2     John   35    Toronto      M
# 3     Matt   64    Atlanta      M

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

Заменить значения во всем кадре данных

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

Давайте заменим букву F на P во всем DataFrame:

# Replace Values Across and Entire DataFrame
df = df.replace(
    to_replace='M', 
    value='P')

print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Jane   23     London      F
# 1  Melissa   45      Paris      F
# 2     John   35    Toronto      P
# 3     Matt   64    Atlanta      P

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

Замена значений регулярными выражениями (регулярные выражения)

Чтобы заменить подстроки в DataFrame Pandas, можно указать Pandas использовать регулярные выражения (regex). Чтобы заменить подстроки (например, в Melissa), мы просто передаем regex=True:

# Replace Values Using Regex
df = df.replace(
    to_replace='M', 
    value='P',
    regex=True)

print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Jane   23     London      F
# 1  Pelissa   45      Paris      F
# 2     John   35    Toronto      P
# 3     Patt   64    Atlanta      P

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

Использование Pandas .replace() с более сложным регулярным выражением

Мы можем использовать регулярные выражения для выполнения сложных замен.

Мы рассмотрим достаточно простой пример, где мы заменяем любое четырехбуквенное слово в колонке Имя на “Четырехбуквенное имя”.

Следующий вызов метода .replace() делает именно это:

# Using More Complex Regex with Pandas .replace()
df = df.replace(
    to_replace=r'\b\w{4}\b', 
    value='Four letter name',
    regex=True)

print(df)

# Returns:
#                Name  Age Birth City Gender
# 0  Four letter name   23     London      F
# 1           Melissa   45      Paris      F
# 2  Four letter name   35    Toronto      M
# 3  Four letter name   64    Atlanta      M

В следующем разделе вы научитесь заменять значения на месте.

Замените значения на месте с помощью Pandas

Мы также можем заменять значения на месте, без необходимости их повторного присваивания. Это делается путем установки inplace= в True

Давайте вернемся к более раннему примеру:

# Replacing Values In Place
df['Birth City'].replace(
    to_replace='Paris', 
    value='France',
    inplace=True)

print(df)

# Returns:
#       Name  Age Birth City Gender
# 0     Jane   23     London      F
# 1  Melissa   45     France      F
# 2     John   35    Toronto      M
# 3     Matt   64    Atlanta      M

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

Использование словарей для замены значений с помощью Pandas replace

Метод .replace() в Pandas также позволяет использовать словари для замены значений. Это может быть удобным способом обработки множества замен. Однако это не мой предпочтительный подход, так как поведение часто может быть сложным для понимания.

Давайте посмотрим, как метод может заменять значения:

# Using a Dictionary (Dict is passed into to_replace=)
df['Age'] = df['Age'].replace({23:99, 45:999})

# Using a Dictionary for Column Replacements (key:value = column:value)
df = df.replace({'Name': 'Jane', 'Age': 45}, 99)

Мы видим, что словарь можно использовать двумя разными способами:

  1. Чтобы сопоставить значения для замены, чтобы словарь представлял {original value : new value}

  2. Чтобы сопоставить замены из столбцов так, чтобы они соответствовали структуре, показанной здесь:to_replace={column1: value1, column2: value2}, value=new value

Хотя первый подход более краткий, я бы предпочел использовать метод map() в Pandas для этого подхода.

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

Заключение

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

Чтобы узнать больше о методе .replace() в библиотеке Pandas, ознакомьтесь с официальной документацией здесь.

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

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

  • Pandas: замените NaN нулями

  • Python: заменить элемент в списке (6 разных способов)

  • Преобразование столбцов Pandas с помощью карты и применения

Last updated