/
Вопросы и ответы
/
Аналитика данных
/

Pandas как заменить значения

Pandas как заменить значения

4 года назад

Arthur Cheremisin

Ответы

0

Для замены значений в DataFrame с помощью библиотеки pandas можно воспользоваться методами replace() или loc().

Метод replace() позволяет заменить все значения в DataFrame определенным значением. Например, если нужно заменить все значения в столбце 'A' равные 1 на 0, то можно использовать следующий код:

1
2
3
4
5
6
7
8
import pandas as pd

data = {'A': [1, 2, 3, 1, 4],
        'B': [5, 6, 7, 8, 9]}

df = pd.DataFrame(data)

df['A'] = df['A'].replace(1, 0)

Метод loc() позволяет заменить значения в DataFrame на основе условия. Например, если нужно заменить все значения в столбце 'A' больше 2 на 10, то можно использовать следующий код:

1
df.loc[df['A'] > 2, 'A'] = 10

Таким образом, с помощью методов replace() и loc() можно легко заменить значения в DataFrame в соответствии с заданными условиями.

2 года назад

Elena Gromova

0

Конкретные значения в pandas заменяют методом replace(). В него передают словарь «что → на что»:

1
2
3
4
5
import pandas as pd

df = pd.DataFrame({"city": ["Мск", "СПб", "Мск"], "sales": [100, -1, 250]})
df["city"] = df["city"].replace({"Мск": "Москва", "СПб": "Санкт-Петербург"})
print(df["city"].tolist())  # => ['Москва', 'Санкт-Петербург', 'Москва']

Заменить по условию

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

1
2
df.loc[df["sales"] < 0, "sales"] = 0
print(df["sales"].tolist())  # => [100, 0, 250]

Два варианта значения в зависимости от условия — через numpy.where:

1
2
3
4
import numpy as np

df["level"] = np.where(df["sales"] >= 200, "высокие", "низкие")
print(df["level"].tolist())  # => ['низкие', 'низкие', 'высокие']

Заменить пропуски

1
2
3
df = pd.DataFrame({"age": [25, None, 32]})
df["age"] = df["age"].fillna(0)
print(df["age"].tolist())  # => [25.0, 0.0, 32.0]

Средним значением: df["age"].fillna(df["age"].mean()).

Заменить часть строки

1
2
3
df = pd.DataFrame({"phone": ["8-900-111", "8-900-222"]})
df["phone"] = df["phone"].str.replace("-", "", regex=False)
print(df["phone"].tolist())  # => ['8900111', '8900222']

replace() без .str заменяет значение ячейки целиком. Для замены внутри строки нужен .str.replace().

Заменить через функцию

1
2
3
df = pd.DataFrame({"price": [100, 250]})
df["price"] = df["price"].map(lambda p: p * 1.2)
print(df["price"].tolist())  # => [120.0, 300.0]

Частая ошибка

SettingWithCopyWarning появляется, если менять значения в отфильтрованной копии: df[df["sales"] < 0]["sales"] = 0. Такая запись может не изменить исходную таблицу. Пишите через df.loc[условие, "столбец"] = значение.

Работу с таблицами в pandas разбирают в курсе «Python для анализа данных».

17 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845