Spec-Zone.ru › pandas 0.23

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

Spec-Zone.ru

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