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