pandas.Series.str.replace #

系列.str。替换( pat , repl , n = -1 , case = None , flags = 0 , regex = False ) [来源] #

替换系列/索引中每个出现的模式/正则表达式。

相当于str.replace()re.sub(),具体取决于正则表达式值。

参数
pat str 或编译的正则表达式

字符串可以是字符序列或正则表达式。

repl str 或可调用

替换字符串或可调用字符串。可调用对象传递正则表达式匹配对象,并且必须返回要使用的替换字符串。看re.sub()

n int,默认-1(全部)

从一开始就要进行的替换次数。

case布尔值,默认无

确定替换是否区分大小写:

  • 如果为 True,则区分大小写(如果pat是字符串,则默认)

  • 设置为 False 不区分大小写

  • 如果pat是已编译的正则表达式,则无法设置。

flags int,默认0(无标志)

正则表达式模块标志,例如 re.IGNORECASE。如果pat是已编译的正则表达式,则无法设置。

正则表达式bool,默认 False

确定传入的模式是否是正则表达式:

  • 如果为 True,则假定传入的模式是正则表达式。

  • 如果为 False,则将模式视为文字字符串

  • 如果pat是已编译的正则表达式或repl是可调用的,则不能设置为 False 。

返回
对象的系列或索引

对象的副本,其中所有匹配的pat都替换为 repl

加薪
值错误
  • 如果regex为 False 并且repl是可调用的或pat是已编译的正则表达式

  • 如果pat是已编译的正则表达式并且设置了大小写标志

笔记

pat是已编译的正则表达式时,所有标志都应包含在已编译的正则表达式中。将caseflagsregex=False与已编译的正则表达式一起使用将引发错误。

例子

pat是字符串且regex为 True 时,给定的pat 被编译为正则表达式。当repl是字符串时,它将替换匹配的正则表达式模式,如re.sub().系列中的 NaN 值保持原样:

>>> pd.Series(['foo', 'fuz', np.nan]).str.replace('f.', 'ba', regex=True)
0    bao
1    baz
2    NaN
dtype: object

pat是字符串且正则表达式为 False 时,每个pat都会被替换为 repl,如下所示str.replace()

>>> pd.Series(['f.o', 'fuz', np.nan]).str.replace('f.', 'ba', regex=False)
0    bao
1    fuz
2    NaN
dtype: object

repl是可调用的时,每次使用 都会调用它re.sub()。可调用函数应该需要一个位置参数(一个正则表达式对象)并返回一个字符串。

为了得到这个想法:

>>> pd.Series(['foo', 'fuz', np.nan]).str.replace('f', repr, regex=True)
0    <re.Match object; span=(0, 1), match='f'>oo
1    <re.Match object; span=(0, 1), match='f'>uz
2                                            NaN
dtype: object

反转每个小写字母单词:

>>> repl = lambda m: m.group(0)[::-1]
>>> ser = pd.Series(['foo 123', 'bar baz', np.nan])
>>> ser.str.replace(r'[a-z]+', repl, regex=True)
0    oof 123
1    rab zab
2        NaN
dtype: object

使用正则表达式组(提取第二组并交换大小写):

>>> pat = r"(?P<one>\w+) (?P<two>\w+) (?P<three>\w+)"
>>> repl = lambda m: m.group('two').swapcase()
>>> ser = pd.Series(['One Two Three', 'Foo Bar Baz'])
>>> ser.str.replace(pat, repl, regex=True)
0    tWO
1    bAR
dtype: object

使用带标志的已编译正则表达式

>>> import re
>>> regex_pat = re.compile(r'FUZ', flags=re.IGNORECASE)
>>> pd.Series(['foo', 'fuz', np.nan]).str.replace(regex_pat, 'bar', regex=True)
0    foo
1    bar
2    NaN
dtype: object