pandas.Series.replace
-
Series.replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')[source] -
Заменить значения, заданные в
to_replace, наvalue.Значения в Series заменяются динамически другими значениями. Это отличается от обновления с помощью
.locили.iloc, которые требуют указать место для обновления с каким-то значением.Параметры: -
to_replace : str, regex, list, dict, Series, int, float, or None -
Как найти значения, которые будут заменены.
-
числовое значение, строка или регулярное выражение:
- числовое значение: числовые значения, равные
to_replace, будут заменены наvalue - строка: строка, точно совпадающая с
to_replace, будет заменена наvalue - регулярное выражение: регулярные выражения, соответствующие
to_replace, будут заменены наvalue
- числовое значение: числовые значения, равные
-
список строк, регулярных выражений или числовых значений:
- Во-первых, если
to_replaceиvalueявляются списками, их длина должна быть одинаковой. - Во-вторых, если
regex=True, то все строки в обоих списках будут интерпретированы как регулярные выражения, в противном случае они будут сопоставляться напрямую. Это не имеет большого значения дляvalue, так как существует всего несколько возможных заменяющих регулярных выражений, которые можно использовать. - Правила для строк, регулярных выражений и числовых значений применяются так же, как и выше.
- Во-первых, если
-
словарь:
- Словари могут использоваться для указания различных значений замены для различных существующих значений. Например,
{'a': 'b', 'y': 'z'}заменяет значение ‘a’ на ‘b’, а ‘y’ на ‘z’. Для использования словаря таким образом параметрvalueдолжен бытьNone. - Для DataFrame словарь может указывать, что различные значения должны быть заменены в разных столбцах. Например,
{'a': 1, 'b': 'z'}ищет значение 1 в столбце ‘a’ и значение ‘z’ в столбце ‘b’ и заменяет эти значения на то, что указано вvalue. Параметрvalueне должен бытьNoneв этом случае. Это можно рассматривать как частный случай передачи двух списков, за исключением того, что вы указываете столбец, в котором нужно искать. - Для DataFrame вложенные словари, например,
{'a': {'b': np.nan}}, читаются следующим образом: ищется значение ‘b’ в столбце ‘a’ и заменяется на NaN. Параметрvalueдолжен бытьNone, чтобы использовать вложенный словарь таким образом. Регулярные выражения также можно вкладывать. Обратите внимание, что имена столбцов (ключи словаря верхнего уровня во вложенном словаре) не могут быть регулярными выражениями.
- Словари могут использоваться для указания различных значений замены для различных существующих значений. Например,
-
None:
- Это означает, что аргумент
regexдолжен быть строкой, скомпилированным регулярным выражением или списком, словарем, массивом ndarray или Series таких элементов. ЕслиvalueтакжеNone, то это должен быть вложенный словарь или Series.
- Это означает, что аргумент
Примеры каждого из этих вариантов см. в разделе примеров.
-
-
value : scalar, dict, list, str, regex, default None -
Значение для замены любых значений, соответствующих
to_replace. Для DataFrame можно использовать словарь значений для указания, какое значение использовать для каждого столбца (столбцы, не указанные в словаре, не будут заполнены). Также разрешены регулярные выражения, строки и списки или словари таких объектов. -
inplace : bool, default False -
Если True, выполняется на месте. Примечание: это изменит любые другие представления этого объекта (например, столбец из DataFrame). Возвращает вызывающий объект, если это True.
-
limit : int, default None -
Максимальный размер разрыва для заполнения вперед или назад.
-
regex : bool or same types as to_replace, default False -
Надо ли интерпретировать
to_replaceи/илиvalueкак регулярные выражения. Если этоTrue, тоto_replaceдолжен быть строкой. В качестве альтернативы, это может быть регулярное выражение или список, словарь или массив регулярных выражений, в этом случаеto_replaceдолжен бытьNone. -
method : {‘pad’, ‘ffill’, ‘bfill’, None} -
Метод для использования при замене, когда
to_replaceявляется скаляром, списком или кортежем, аvalue-None.Изменено в версии 0.23.0: Добавлено в DataFrame.
Возвращает: - Series
-
Объект после замены.
Возможные исключения: - AssertionError
-
- Если
regexне являетсяboolиto_replaceне являетсяNone.
- Если
- TypeError
-
- Если
to_replaceявляетсяdictиvalueне являетсяlist,dict,ndarray, илиSeries - Если
to_replaceявляетсяNoneиregexне компилируется в регулярное выражение или является списком, словарем, массивом ndarray или Series. - При замене нескольких
boolилиdatetime64объектов, и аргументы вto_replaceне соответствуют типу заменяемого значения.
- Если
- ValueError
-
- Если
listилиndarrayпередаются вto_replaceиvalue, но они не имеют одинаковой длины.
- Если
См. также
-
Series.fillna - Заполнить пропущенные значения.
-
Series.where - Заменить значения на основе булевого условия.
-
Series.str.replace - Простая замена строк.
Примечания
- Замена регулярных выражений выполняется под капотом с помощью
re.sub. Правила замены дляre.subтакие же. - Регулярные выражения будут заменять только строки, что означает, что вы не можете, например, предоставить регулярное выражение, соответствующее числам с плавающей точкой, и ожидать, что столбцы в вашем фрейме, которые имеют числовой тип данных, будут сопоставляться. Однако, если эти числа с плавающей точкой являются строками, то вы можете это сделать.
- У этого метода очень много вариантов. Рекомендуется экспериментировать и играть с этим методом, чтобы получить интуицию о том, как он работает.
- Когда в качестве значения
to_replaceиспользуется словарь, ключи в словаре — это часть to_replace, а значения — значение параметра.
Примеры
Скаляр `to_replace` и `value`
>>> s = pd.Series([0, 1, 2, 3, 4]) >>> s.replace(0, 5) 0 5 1 1 2 2 3 3 4 4 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Список `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 0 1 3 2 3 3 3 4 4 dtype: int64
Словарь `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Обратите внимание, что при замене нескольких
boolилиdatetime64объектов, типы данных в параметреto_replaceдолжны соответствовать типу заменяемого значения:>>> df = pd.DataFrame({'A': [True, False, True], ... 'B': [False, True, False]}) >>> df.replace({'a string': 'new value', True: False}) # raises Traceback (most recent call last): ... TypeError: Cannot compare types 'ndarray(dtype=bool)' and 'str'Это приводит к ошибке
TypeError, так как один из ключейdictне имеет правильного типа для замены.Сравните поведение
s.replace({'a': None})иs.replace('a', None), чтобы понять особенности параметраto_replace.>>> s = pd.Series([10, 'a', 'a', 'b', 'a'])
Когда в качестве значения
to_replaceиспользуется словарь, значения в словаре эквивалентны параметруvalue.s.replace({'a': None})эквивалентноs.replace(to_replace={'a': None}, value=None, method=None).>>> s.replace({'a': None}) 0 10 1 None 2 None 3 b 4 None dtype: objectКогда
value=Noneиto_replace— скаляр, список или кортеж,replaceиспользует метод (по умолчанию ‘pad’) для замены. Поэтому именно так значения ‘a’ заменяются на 10 в строках 1 и 2 и на ‘b’ в строке 4 в данном случае. Командаs.replace('a', None)фактически эквивалентнаs.replace(to_replace='a', value=None, method='pad').>>> s.replace('a', None) 0 10 1 10 2 10 3 b 4 b dtype: object -
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.25.0/reference/api/pandas.Series.replace.html