Spec-Zone.ru › pandas 0.23

pandas.DataFrame.replace

DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad') [source]

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

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

Параметры:

to_replace : str, regex, список, dict, 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 должен быть строкой, скомпилированным регулярным выражением или списком, словарем, массивом или Series таких элементов. Если value также None , то это должен быть вложенный словарь или Series.

См. раздел «Примеры» для примеров каждого из них.

value : скаляр, dict, список, строка, регулярное выражение, по умолчанию 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.

Возвращает:

DataFrame

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

Возможные исключения:

AssertionError

  • Если regex не является bool и to_replace не None.

TypeError

  • Если to_replace является dict , а value не является list, dict, ndarray, или Series
  • Если to_replace является None , а regex не компилируется в регулярное выражение или является списком, словарем, массивом или Series.
  • При замене нескольких bool или datetime64 объектов и аргументы для to_replace не соответствуют типу заменяемого значения

ValueError

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

См. также

DataFrame.fillna
Заполнить значения NaN
DataFrame.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.23.4/generated/pandas.DataFrame.replace.html

Spec-Zone.ru

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