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, 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.
Возвращает: - DataFrame
-
Объект после замены.
Возможные исключения: - 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, но они не имеют одинаковой длины.
- Если
См. также
-
DataFrame.fillna - Заполнение пропущенных значений.
-
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.24.2/reference/api/pandas.DataFrame.replace.html