Spec-Zone.ru › pandas 0.23

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API