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, 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.
Возвращает: - 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использует параметр метода (по умолчанию '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.24.2/reference/api/pandas.Panel.replace.html