pandas.Series.replace
-
Series.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')[source] -
Замена значений, указанных в
to_replace, наvalue.Значения в серии заменяются динамически другими значениями. Это отличается от обновления с помощью
.locили.iloc, которые требуют указания местоположения для обновления с помощью какого-либо значения.Параметры: to_replace : str, regex, список, словарь, Series, int, float или 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}}, читаются следующим образом: ищем в столбце ‘a’ значение ‘b’ и заменяем его на NaN. Параметрvalueдолжен бытьNoneдля использования вложенного словаря таким образом. Вы также можете вкладывать регулярные выражения. Обратите внимание, что имена столбцов (ключи словаря верхнего уровня во вложенном словаре) не могут быть регулярными выражениями.
- Словари могут использоваться для указания различных значений замены для разных существующих значений. Например,
-
None:
- Это означает, что аргумент
regexдолжен быть строкой, скомпилированным регулярным выражением или списком, словарем, массивом ndarray или Series таких элементов. ЕслиvalueтакжеNone, то это должно быть вложенный словарь или Series.
- Это означает, что аргумент
См. раздел «Примеры» для примеров каждого из них.
value : скаляр, словарь, список, строка, регулярное выражение, по умолчанию None
Значение, на которое следует заменить все значения, соответствующие
to_replace. Для DataFrame может быть использован словарь значений для указания значения для каждого столбца (столбцы, отсутствующие в словаре, не будут заполнены). Также допускаются регулярные выражения, строки и списки или словари таких объектов.inplace : boolean, по умолчанию False
Если True, выполняется на месте. Примечание: это изменяет любые другие представления этого объекта (например, столбец из DataFrame). Возвращает вызывающий объект, если это True.
limit : int, по умолчанию None
Максимальный размер разрыва для заполнения вперед или назад.
regex : bool или тот же тип, что и
to_replace, по умолчанию 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, а значения(и) в словаре — это параметр value.
Примеры
Скалярное `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использует параметр method (по умолчанию «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.23.4/generated/pandas.Series.replace.html