В Пандах есть два replace
метода.
Тот, который действует непосредственно на Серию, может принимать строку шаблона регулярного выражения или скомпилированное регулярное выражение и может действовать на месте, но не позволяет аргументу замены быть вызываемым . Вы должны установить regex=True
и использовать необработанные строки.
С:
import re
import pandas as pd
ser = pd.Series(['Aland Islands !Åland Islands', 'Reunion !Réunion', 'Zimbabwe'])
Да:
ser.replace(r'.*!(.*)', r'\1', regex=True, inplace=True)
ser.replace(r'.*!', '', regex=True, inplace=True)
regex = re.compile(r'.*!(.*)', inplace=True)
ser.replace(regex, r'\1', regex=True, inplace=True)
нет
№:
repl = lambda m: m.group(1)
ser.replace(regex, repl, regex=True, inplace=True)
Есть еще один, используемый как Series.str.replace
. Он принимает вызываемую замену, но не подставляет на месте и не принимает аргумент regex
(хотя могут использоваться строки шаблона регулярного выражения):
Да:
ser.str.replace(r'.*!', '')
ser.str.replace(r'.*!(.*)', r'\1')
ser.str.replace(regex, repl)
нет
Нет
ser.str.replace(regex, r'\1')
ser.str.replace(r'.*!', '', inplace=True)
Надеюсь, это кому-нибудь пригодится.