pandas.Series.replace#

Series.replace(to_replace=None, value=, *, inplace=False, limit=None, regex=False, method=)[источник]#

Заменить значения, указанные в to_replace с значение.

Значения Series/DataFrame заменяются другими значениями динамически. Это отличается от обновления с помощью .loc или .iloc, которые требуют указания местоположения для обновления некоторым значением.

Параметры:
to_replacestr, regex, list, dict, Series, int, float или None

Как найти значения, которые будут заменены.

  • numeric, str или regex:

    • числовые: числовые значения, равные to_replace будет заменен на значение

    • str: строка, точно соответствующая to_replace будет заменён на значение

    • regex: регулярные выражения, соответствующие to_replace будет заменён на значение

  • список строк, регулярных выражений или чисел:

    • Во-первых, если to_replace и значение оба являются списками, они должен должны быть одинаковой длины.

    • Во-вторых, если regex=True тогда все строки в оба списки будут интерпретироваться как регулярные выражения, в противном случае они будут сопоставляться напрямую. Это не имеет большого значения для значение поскольку существует лишь несколько возможных регулярных выражений для замены, которые можно использовать.

    • правила для строк, регулярных выражений и чисел применяются, как указано выше.

  • dict:

    • Словари могут использоваться для указания различных значений замены для разных существующих значений. Например, {'a': 'b', 'y': 'z'} заменяет значение 'a' на 'b' и 'y' на 'z'. Чтобы использовать словарь таким образом, необязательный значение параметр не должен указываться.

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

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

  • None:

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

Смотрите раздел примеров для примеров каждого из них.

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

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

inplacebool, по умолчанию False

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

limitint, по умолчанию None

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

Устарело с версии 2.1.0.

regexbool или те же типы, что и to_replace, по умолчанию False

Интерпретировать ли to_replace и/или значение как регулярные выражения. Альтернативно, это может быть регулярное выражение или список, словарь или массив регулярных выражений, в этом случае to_replace должен быть None.

метод{‘pad’, ‘ffill’, ‘bfill’}

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

Устарело с версии 2.1.0.

Возвращает:
Series/DataFrame

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

Вызывает:
AssertionError
  • Если regex не является bool и to_replace не является None.

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

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

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

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

ValueError
  • Если list или ndarray передаётся в to_replace и значение но они не одинаковой длины.

Смотрите также

Series.fillna

Заполнить значения NA.

DataFrame.fillna

Заполнить значения NA.

Series.where

Заменить значения на основе булева условия.

DataFrame.where

Заменить значения на основе булева условия.

DataFrame.map

Применить функцию к элементам Dataframe поэлементно.

Series.map

Сопоставление значений Series в соответствии с входным отображением или функцией.

Series.str.replace

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

Примечания

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

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

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

  • Когда dict используется как 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'])

Когда используется dict как to_replace значение, это похоже на значение(я) в словаре равны значение параметр. 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

Устарело с версии 2.1.0: Параметр 'method' и поведение заполнения устарели.

С другой стороны, если None явно передается для value, это будет соблюдаться:

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

Изменено в версии 1.4.0: Ранее явный None был проигнорирован без предупреждения.

Когда regex=True, value не является None и to_replace является строкой, замена будет применена ко всем столбцам DataFrame.

>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
...                    'B': ['a', 'b', 'c', 'd', 'e'],
...                    'C': ['f', 'g', 'h', 'i', 'j']})
>>> df.replace(to_replace='^[a-g]', value='e', regex=True)
    A  B  C
0  0  e  e
1  1  e  e
2  2  e  h
3  3  e  i
4  4  e  j

Если value не является None и to_replace является словарём, ключи словаря будут столбцами DataFrame, к которым будет применена замена.

>>> df.replace(to_replace={'B': '^[a-c]', 'C': '^[h-j]'}, value='e', regex=True)
    A  B  C
0  0  e  f
1  1  e  g
2  2  e  e
3  3  d  e
4  4  e  e