Spec-Zone.ru › pandas 1

pandas.Series.replace

Series.replace(to_replace=None, value=_NoDefault.no_default, inplace=False, limit=None, regex=False, method=_NoDefault.no_default)[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 не должен быть указан.

    • Для DataFrame словарь может указать, что разные значения должны быть заменены в разных столбцах. Например, {'a': 1, 'b': 'z'} ищет значение 1 в столбце ‘a’ и значение ‘z’ в столбце ‘b’ и заменяет эти значения на то, что указано в value. Параметр value не должен быть None в этом случае. Вы можете рассматривать это как частный случай передачи двух списков, за исключением того, что вы указываете столбец для поиска.

    • Для DataFrame вложенные словари, например, {'a': {'b': np.nan}}, читаются следующим образом: ищется значение ‘b’ в столбце ‘a’ и заменяется на NaN. Необязательный параметр value не должен быть указан для использования вложенного словаря таким образом. Вы также можете вкладывать регулярные выражения. Обратите внимание, что имена столбцов (ключи словаря верхнего уровня во вложенном словаре) не могут быть регулярными выражениями.

  • None:

    • Это означает, что аргумент regex должен быть строкой, скомпилированным регулярным выражением или списком, словарем, массивом NumPy или Series таких элементов. Если value также None, то это должен быть вложенный словарь или Series.

Примеры каждого из этих вариантов см. в разделе «Примеры».

value:скаляр, словарь, список, строка, регулярное выражение, по умолчанию None

Значение, на которое будут заменены все значения, соответствующие to_replace. Для DataFrame можно использовать словарь значений для указания, какое значение использовать для каждого столбца (столбцы, не входящие в словарь, не будут заполнены). Также разрешены регулярные выражения, строки, а также списки или словари таких объектов.

inplace:bool, по умолчанию False

Если True, выполняет операцию на месте и возвращает None.

limit:int, по умолчанию None

Максимальный размер разрыва для заполнения вперед или назад.

regex:bool или тот же тип, что и to_replace, по умолчанию False

Является ли to_replace и/или value регулярным выражением. Если это True, то to_replace должен быть строкой. В качестве альтернативы, это может быть регулярное выражение или список, словарь или массив регулярных выражений, в этом случае to_replace должен быть None.

method:{‘pad’, ‘ffill’, ‘bfill’}

Метод, используемый при замене, когда to_replace является скаляром, списком или кортежем, а value None.

Изменено в версии 0.23.0: Добавлена в DataFrame.

Возвращает
Series

Объект после замены.

Возможные исключения
AssertionError
  • Если regex не является bool и to_replace не None.

TypeError
  • Если to_replace не является скаляром, массивоподобным объектом, dict, или None

  • Если to_replace является dict и value не является list, dict, ndarray, или Series

  • Если to_replace является None и regex не может быть скомпилировано в регулярное выражение или является списком, словарем, массивом NumPy или Series.

  • При замене нескольких bool или datetime64 объектов, и аргументы to_replace не соответствуют типу заменяемого значения

ValueError
  • Если в to_replace и value переданы list или ndarray, но их длины не совпадают.

См. также

Series.fillna

Заполнение пропущенных значений.

Series.where

Замена значений на основе логического условия.

Series.str.replace

Простая замена строк.

Примечания

  • Замена регулярных выражений выполняется под капотом с помощью re.sub. Правила подстановки для re.sub такие же.

  • Регулярные выражения будут подставляться только для строк, то есть вы не можете, например, предоставить регулярное выражение, сопоставляющее числа с плавающей точкой, и ожидать, что столбцы в вашей таблице с числовым типом данных будут сопоставляться. Однако, если эти числа с плавающей точкой являются строками, то вы можете это сделать.

  • Этот метод имеет очень много опций. Мы рекомендуем экспериментировать и играть с этим методом, чтобы получить интуицию о его работе.

  • Когда словарь используется в качестве значения to_replace, это как будто ключи в словаре - это часть to_replace, а значения в словаре - это параметр value.

Примеры

Скалярное `to_replace` и `value`

>>> s = pd.Series([1, 2, 3, 4, 5])
>>> s.replace(1, 5)
0    5
1    2
2    3
3    4
4    5
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    3
1    3
2    3
3    4
4    5
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

Сравните поведение 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 не указан явно, и to_replace является скаляром, списком или кортежем, replace использует параметр method (по умолчанию ‘pad’) для замены. Вот почему значения ‘a’ заменяются на 10 в строках 1 и 2, а ‘b’ в строке 4 в этом случае.

>>> s.replace('a')
0    10
1    10
2    10
3     b
4     b
dtype: object

С другой стороны, если None явно указан для value, он будет учтен:

>>> s.replace('a', None)
0      10
1    None
2    None
3       b
4    None
dtype: object

Изменено в версии 1.4.0: Ранее явное значение None игнорировалось неявно.

© 2008–2022, 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/1.5.0/reference/api/pandas.Series.replace.html

Spec-Zone.ru

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