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