pandas.Panel.replace
-
Panel.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')[source] -
Замена значений, заданных в
to_replaceнаvalue.Значения NDFrame заменяются другими значениями динамически. Это отличается от обновления с помощью
.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}}, читаются следующим образом: ищется значение 'b' в столбце 'a' и заменяется на NaN. Для использования вложенного словаря таким образом параметрvalueдолжен бытьNone. Можно вкладывать и регулярные выражения. Обратите внимание, что имена столбцов (ключи словаря верхнего уровня во вложенном словаре) не могут быть регулярными выражениями.
- Словари могут использоваться для указания различных значений замены для различных существующих значений. Например,
-
None:
- Это означает, что аргумент
regexдолжен быть строкой, скомпилированным регулярным выражением или списком, словарем, массивом ndarray или Series таких элементов. ЕслиvalueтакжеNone, то это должен быть вложенный словарь или Series.
- Это означает, что аргумент
Примеры каждого из этих способов см. в разделе примеров.
value : скаляр, словарь, список, строка, регулярное выражение, по умолчанию None
Значение, которое заменяет любые значения, соответствующие
to_replace.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.
Возвращает: NDFrame
Объект после замены.
Возможные исключения: 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, но они не имеют одинаковой длины.
См. также
-
NDFrame.fillna - Заполнение пропущенных значений
-
NDFrame.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.Panel.replace.html