Spec-Zone.ru › pandas 0.24

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, list, dict, Series, int, float, or 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 : scalar, dict, list, str, regex, default None

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

inplace : bool, default False

Если True, выполняется на месте. Примечание: это изменит любые другие представления этого объекта (например, столбец из DataFrame). Возвращает вызывающий объект, если это True.

limit : int, default None

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

regex : bool or same types as to_replace, default 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 использует параметр метода (по умолчанию '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.24.2/reference/api/pandas.Panel.replace.html

Spec-Zone.ru

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