Как заменить значения в кадре данных Pandas (с примерами)
Часто вам может понадобиться заменить значения в одном или нескольких столбцах кадра данных pandas.
К счастью, это легко сделать с помощью функции .replace() .
В этом руководстве представлено несколько примеров практического использования этой функции в следующем кадре данных:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team division rebounds 0 A E 11 1 A W 8 2 B E 7 3 B E 6 4 B W 6 5 C W 5 6 C E 12
Пример 1: замена одного значения во всем фрейме данных
В следующем коде показано, как заменить одно значение во всем DataFrame pandas:
#replace 'E' with 'East' df = df.replace(['E'],' East') #view DataFrame print(df) team division rebounds 0 A East 11 1 A W 8 2 B East 7 3 B East 6 4 B W 6 5 C W 5 6 C East 12
Пример 2: замена нескольких значений во всем фрейме данных
В следующем коде показано, как заменить несколько значений во всем кадре данных pandas:
#replace 'E' with 'East' and 'W' with 'West' df = df.replace(['E', 'W'],['East', 'West']) #view DataFrame print(df) team division rebounds 0 A East 11 1 A West 8 2 B East 7 3 B East 6 4 B West 6 5 C West 5 6 C East 12
Пример 3. Замена одного значения в одном столбце
В следующем коде показано, как заменить одно значение в одном столбце:
#replace 6 with 0 in *rebounds* column df['rebounds'] = df['rebounds']. replace (6, 0) #view DataFrame print(df) team division rebounds 0 A E 11 1 A W 8 2 B E 7 3 B E 0 4 B W 0 5 C W 5 6 C E 12
Пример 4. Замена нескольких значений в одном столбце
Следующий код показывает, как заменить несколько значений в одном столбце:
#replace 6, 11, and 8 with 0, 1 and 2 in *rebounds* column df['rebounds'] = df['rebounds']. replace([6, 11, 8], [0, 1, 2]) #view DataFrame print(df) team division rebounds 0 A E 1 1 A W 2 2 B E 7 3 B E 0 4 B W 0 5 C W 5 6 C E 12
Замена значения в столбце по значению другого столбца Pandas DataFrame по условию
Как сделать так, чтобы при значении False в столбце Winner выводилась ячейка Dire, а при True — ячейка Radiant? Пример ниже:
Match ID Radiant Dire Winner 0 6808446343 beastcoast Team Aster Team Aster 1 6808199906 PSG.LGD Team Liquid PSG.LGD 2 6807837834 PSG.LGD OG PSG.LGD 3 6808433308 TSM FTX Team Spirit Team Spirit 4 6808416013 Fnatic Entity Fnatic .. . . . .
Пытался таким куском кода — не вышло, ячейки не менялись вовсе:
for i in range(len(df)): if df["Winner"][i] == "TRUE": df["Winner"][i] == df["Radiant"][i] elif df["Winner"][i] == "FALSE": df["Winner"][i] == df["Dire"][i]
Также были попытки через .loc , но не вышло: видимо где-то ошибся. Прошу помощи 🙂
pandas.Series.replace
Замените значения, указанные в to_replace with value .
Значения серии динамически заменяются другими значениями.
Это отличается от обновления с помощью .loc или .iloc , которые требуют указать место для обновления с некоторым значением.
Parameters to_replace:str, regex, list, dict, Series, int, float или None
Как найти значения, которые будут заменены.
-
числовое, str или регулярное выражение:
- числовой: числовые значения, равные to_replace будет заменен на value
- str: строка, точно соответствующая to_replace будет заменен на value
- регулярное выражение: сопоставление регулярных выражений to_replace будет заменен на value
- First, if to_replace and value оба списка, они должны быть одинаковой длины.
- Во-вторых, если regex=True , то все строки в обоих списках будут интерпретироваться как регулярные выражения, в противном случае они будут совпадать напрямую. Это не имеет большого значения для value поскольку есть только несколько возможных регулярных выражений замены, которые вы можете использовать.
- str, регулярное выражение и числовые правила применяются, как указано выше.
- Словари можно использовать для указания разных значений замены для разных существующих значений. Например, заменяет значение «a» на «b» и «y» на «z». Чтобы использовать dict таким образом, необязательный value параметр не должен быть указан.
- Для DataFrame dict может указать, что разные значения должны быть заменены в разных столбцах. Например, ищет значение 1 в столбце «a» и значение «z» в столбце «b» и заменяет эти значения значениями, указанными в value . The value параметр не должен быть None в этом случае. Вы можете рассматривать это как частный случай передачи двух списков, за исключением того, что вы указываете столбец для поиска.
- Для DataFrame вложенные словари, например, > , читаются следующим образом: найдите в столбце «a» значение «b» и замените его на NaN.. value Не следует указывать параметр для использования вложенного словаря таким образом. Вы также можете вкладывать регулярные выражения. Обратите внимание, что имена столбцов (ключи словаря верхнего уровня во вложенном словаре) не могут быть регулярными выражениями.
- Это означает, что regex Аргумент должен быть строкой, скомпилированным регулярным выражением или списком, dict, ndarray или серией таких элементов. Если value также None , то это должен быть вложенный словарь или серия.
См. раздел примеров для примеров каждого из них.
значение: скаляр, словарь, список, строка, регулярное выражение, значение по умолчанию None
Значение для замены любых совпадающих значений to_replace с. Для DataFrame можно использовать словарь значений, чтобы указать, какое значение использовать для каждого столбца (столбцы, отсутствующие в словаре, не будут filled).. Регулярные выражения, строки и списки или словари таких объектов также разрешены.
на месте: bool, по умолчанию False
Если True, выполняет операцию на месте и возвращает None.
лимит: целое число, по умолчанию None
Зазор максимального размера для прямого или обратного заполнения.
регулярное выражение: bool или те же типы, что и to_replace, по умолчанию False
Следует ли интерпретировать to_replace and/or value как регулярные выражения. Если это True , то to_replace должна быть строка. В качестве альтернативы это может быть регулярное выражение или список, словарь или массив регулярных выражений, и в этом случае to_replace должен быть None .
Метод, используемый при замене, когда to_replace является скаляром, списком или кортежем и value is None .
Изменено в версии 0.23.0: Добавлено в DataFrame.
Returns Series
Объект после замены.
- If regex не bool и to_replace это не None .
- If to_replace не скаляр, массив, dict или None
- If to_replace это dict и value не является list , dict , ndarray или Series
- If to_replace является None и regex не компилируется в регулярное выражение или является списком, dict, ndarray или Series.
- При замене нескольких объектов bool или datetime64 и аргументов to_replace не соответствует типу заменяемого значения
- Если list или ndarray переданы to_replace and value но они не одинаковой длины.
Заполните значения NA.
Замените значения на основе условия boolean.
Простая замена струн.
- Подстановка регулярных выражений выполняется с помощью re.sub . Правила замены для re.sub такие же.
- Регулярные выражения будут заменять только строки, то есть вы не можете предоставить, например, регулярное выражение, соответствующее числам с плавающей запятой, и ожидать, что столбцы в вашем фрейме, которые имеют числовой тип dtype, будут сопоставлены. Однако, если эти числа с плавающей запятой являются строками, вы можете сделать это.
- Этот метод имеет множество вариантов. Вам предлагается поэкспериментировать и поиграть с этим методом, чтобы понять, как он работает.
- Когда dict используется как to_replace value, это как key(s) в словаре — это часть to_replace, а value(s) в словаре — параметр значения.
Скаляр `to_replace` и «значение»
>>> s = pd.Series([1, 2, 3, 4, 5]) >>> s.replace(1, 5) 0 5 1 2 2 3 3 4 4 5 dtype: int64
>>> df = pd.DataFrame('A': [0, 1, 2, 3, 4], . 'B': [5, 6, 7, 8, 9], . 'C': ['a', 'b', 'c', 'd', 'e']>) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e
List-like `to_replace`
>>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e
>>> df.replace([0, 1, 2, 3], [4, 3, 2, 1]) A B C 0 4 5 a 1 3 6 b 2 2 7 c 3 1 8 d 4 4 9 e
>>> s.replace([1, 2], method='bfill') 0 3 1 3 2 3 3 4 4 5 dtype: int64
dict-like `to_replace`
>>> df.replace(0: 10, 1: 100>) A B C 0 10 5 a 1 100 6 b 2 2 7 c 3 3 8 d 4 4 9 e
>>> df.replace('A': 0, 'B': 5>, 100) A B C 0 100 100 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e
>>> df.replace('A': 0: 100, 4: 400>>) A B C 0 100 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 400 9 e
Регулярное выражение `to_replace`
>>> df = pd.DataFrame('A': ['bat', 'foo', 'bait'], . 'B': ['abc', 'bar', 'xyz']>) >>> df.replace(to_replace=r'^ba.$', value='new', regex=True) A B 0 new abc 1 foo new 2 bait xyz
>>> df.replace('A': r'^ba.$'>, 'A': 'new'>, regex=True) A B 0 new abc 1 foo bar 2 bait xyz
>>> df.replace(regex=r'^ba.$', value='new') A B 0 new abc 1 foo new 2 bait xyz
>>> df.replace(regex=r'^ba.$': 'new', 'foo': 'xyz'>) A B 0 new abc 1 xyz new 2 bait xyz
>>> df.replace(regex=[r'^ba.$', 'foo'], value='new') A B 0 new abc 1 new new 2 bait xyz
Сравните поведение s.replace() и s.replace(‘a’, None) , чтобы понять особенности to_replace parameter:
>>> s = pd.Series([10, 'a', 'a', 'b', 'a'])
Когда кто-то использует дикт в качестве to_replace значение, это как value(s) в дикте равны value параметр. s.replace() эквивалентен s.replace(to_replace=, value=None, method=None) :
>>> s.replace('a': None>) 0 10 1 None 2 None 3 b 4 None dtype: object
Когда value явно не передается и to_replace скаляр, список или кортеж, replace использует параметр метода (по умолчанию ‘pad’) для замены. Вот почему значения «a» заменяются на 10 в строках 1 и 2 и «b» в строке 4 в этом случае.
>>> s.replace('a') 0 10 1 10 2 10 3 b 4 b dtype: object
С другой стороны, если None явно передан для value , это будет соблюдено:
>>> s.replace('a', None) 0 10 1 None 2 None 3 b 4 None dtype: object
Изменено в версии 1.4.0: Ранее явный None молча игнорировался.
Pandas — заменить значение ключом словаря

Как связать введенное число от пользователя с ключом словаря?
Здравствуйте, не могу связать введенное число от пользователя с ключом словаря ( def.
Заменить в карте значение под ключом «temp»
Был бы очень рад, если бы объяснили, как посчитать значение ключа "temp" и найти среднее значение.
Pandas. Заменить NaN на среднее значение того же жанра игры
На начальном датасете в поле User_Count значение Nan замените средним значением количества.
Заменить значения в столбце его ключом
Есть .csv файл, в нем n столбцов. В 4 столбце значения, которые нужно заменить на ключи, но есть.
Словосочитания из словаря заменить на соответствующие им сокращения
Форумчане, здравствуйте! Нужен макрос, который будет из одной колонки Excel’я брать текст.
![]()
3170 / 1424 / 255
Регистрация: 18.01.2021
Сообщений: 2,770

Сообщение было отмечено VistaSV30 как решение
Решение
reverse_d = {w:u for u, v in d.items() for w in v} df['B2'] = df.apply(lambda x: reverse_d[x.A], axis = 1)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Вычесть значение из столбца Pandas
Добрый день! Из всех значений столбца фрейма нужно вычесть другое значение. На примере, все.
Абсолютное значение медианы (Pandas)
Всем привет! Есть DataFrame, в нем есть столбец Summa (Приход\Расход), т.е. положительные и.
Абсолютное значение медианы (Pandas)
Всем привет! Есть DataFrame, в нем есть столбец Summa (Приход\Расход), т.е. положительные и.

Pandas documentation значение False
День добрый. Как работает значение False в регулярном выражении? Значение которое вроде бы.

Как добавлять ошибки с ключом error, а имя и ключом name?
Как добавлять ошибки с ключом error и, а имя и ключом name? $name = $_POST; $phone = $_POST; .