pandas.DataFrame.replace
- DataFrame.replace(to_replace=None, value=_NoDefault.no_default, *, inplace=False, limit=None, regex=False, method=_NoDefault.no_default)[source]
-
Замените значения, заданные в to_replace, на value.
Значения в Series/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 не должен быть указан.Для DataFrame словарь может указать, что разные значения должны быть заменены в разных столбцах. Например,
{'a': 1, 'b': 'z'}ищет значение 1 в столбце ‘a’ и значение ‘z’ в столбце ‘b’ и заменяет эти значения на то, что указано в value. В этом случае параметр value не должен бытьNone. Вы можете рассматривать это как частный случай передачи двух списков, за исключением того, что вы указываете столбец для поиска.Для DataFrame вложенные словари, например,
{'a': {'b': np.nan}}, читаются следующим образом: ищется значение ‘b’ в столбце ‘a’ и заменяется на NaN. Чтобы использовать вложенный словарь таким образом, необязательный параметр value не должен быть указан. Вложенные регулярные выражения также допустимы. Обратите внимание, что имена столбцов (ключи словаря верхнего уровня во вложенном словаре) не могут быть регулярными выражениями.
-
None:
Это означает, что аргумент regex должен быть строкой, скомпилированным регулярным выражением или списком, словарем, массивом ndarray или Series таких элементов. Если value также
None, то это должен быть вложенный словарь или Series.
Примеры каждого из этих способов приведены в разделе «Примеры».
-
- value:скаляр, dict, список, строка, регулярное выражение, по умолчанию None
-
Значение для замены любых значений, соответствующих to_replace. Для DataFrame может использоваться словарь значений, чтобы указать, какое значение использовать для каждого столбца (столбцы, не входящие в словарь, не будут заполнены). Допускаются также регулярные выражения, строки и списки или словари таких объектов.
- inplace:bool, по умолчанию False
-
Если True, выполняет операцию на месте и возвращает None.
- limit:int, по умолчанию None
-
Максимальный размер разрыва для заполнения вперед или назад.
Устарело начиная с версии 2.1.0.
- regex:bool или тот же тип, что и to_replace, по умолчанию False
-
Указывает, интерпретировать ли to_replace и/или value как регулярные выражения. В качестве альтернативы это может быть регулярное выражение или список, словарь или массив регулярных выражений, в этом случае to_replace должен быть
None. - method:{‘pad’, ‘ffill’, ‘bfill’}
-
Метод, используемый при замене, когда to_replace является скаляром, списком или кортежем, а value —
None.Устарело начиная с версии 2.1.0.
- Возвращаемое значение:
-
- Series/DataFrame
-
Объект после замены.
- Исключения:
-
- AssertionError
-
Если regex не является
boolи to_replace неNone.
- TypeError
-
Если to_replace не является скаляром, массивоподобным объектом,
dict, илиNone.Если to_replace является
dictи value не являетсяlist,dict,ndarray, илиSeries.Если to_replace является
Noneи regex не может быть скомпилировано в регулярное выражение или является списком, словарем, массивом ndarray или Series.При замене нескольких
boolилиdatetime64объектов, и аргументы to_replace не соответствуют типу заменяемого значения.
- ValueError
-
Если
listилиndarrayпередаются в to_replace и value, но их длина не совпадает.
См. также
Series.fillna-
Заполнение пропущенных значений.
DataFrame.fillna-
Заполнение пропущенных значений.
Series.where-
Замена значений на основе булевого условия.
DataFrame.where-
Замена значений на основе булевого условия.
DataFrame.map-
Применение функции к элементу DataFrame.
Series.map-
Сопоставление значений Series в соответствии с входным отображением или функцией.
Series.str.replace-
Простая замена строк.
Примечания
Замена с использованием регулярных выражений выполняется с помощью
re.sub. Правила замены дляre.subтакие же.Регулярные выражения будут заменять только строки, то есть вы не можете, например, указать регулярное выражение, которое соответствует числам с плавающей точкой, и ожидать, что столбцы в вашей таблице с числовым типом данных будут сопоставлены. Однако, если эти числа с плавающей точкой являются строками, то вы можете сделать это.
Этот метод имеет очень много вариантов. Рекомендуется экспериментировать и использовать этот метод, чтобы получить представление о том, как он работает.
Когда в качестве значения to_replace используется словарь, ключи(и) в словаре являются частью to_replace, а значения(я) в словаре — значением параметра.
Примеры
Скалярные `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 использует параметр метода (по умолчанию ‘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
© 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/2.2.2/reference/api/pandas.DataFrame.replace.html