mars.dataframe.Series.str.replace#

Series.str.replace(pat: 字符串 | re.模式, repl: 字符串 | Callable, n: 整型 = -1, case: 布尔型 | = None, flags: 整型 = 0, regex: 布尔型 | = None)#

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

等效于 str.replace()re.sub(),取决于正则表达式的值。

Parameters
  • pat (str编译的正则表达式) – 字符串可以是字符序列或正则表达式。

  • repl (str可调用的) – 替换字符串或一个可调用的对象。可调用的对象传递正则表达式匹配对象,并且必须返回一个替换字符串以供使用。参见 re.sub()

  • n (int, 默认 -1 (全部)) – 从开始进行替换的数量。

  • case (bool, default None) –

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

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

    • 设置为 False 则不区分大小写

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

  • flags (int, 默认 0 (无标志)) – 正则表达式模块标志,例如 re.IGNORECASE。如果pat是编译的正则表达式,则不能设置。

  • regex (bool, 默认值为 True) –

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

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

    • 如果为假,则将模式视为字面字符串

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

    在版本 0.23.0 中新增。

Returns

一个复制对象,其中所有匹配的pat都被替换为repl

Return type

系列索引对象

Raises

ValueError

  • 如果 regex 为 False 并且 repl 是一个可调用对象或 pat 是已编译的正则表达式 * 如果 pat 是已编译的正则表达式且 caseflags 被设置

备注

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

示例

pat 是一个字符串并且 regex 为真(默认),给定的 pat 被编译为正则表达式。当 repl 是一个字符串时,它替换匹配的正则表达式模式,就像 re.sub() 一样。Series 中的 NaN 值会保持不变:

>>> import mars.tensor as mt
>>> import mars.dataframe as md
>>> md.Series(['foo', 'fuz', mt.nan]).str.replace('f.', 'ba', regex=True).execute()
0    bao
1    baz
2    NaN
dtype: object

pat 是一个字符串且 regex 为 False 时,每个 pat 都会被替换为 repl,就像 str.replace() 一样:

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

repl 是一个可调用对象时,它会在每个 pat 上调用 re.sub()。可调用对象应该接受一个位置参数 (一个正则表达式对象)并返回一个字符串。

要理解这个概念:

>>> md.Series(['foo', 'fuz', mt.nan]).str.replace('f', repr, regex=True).execute()
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 = md.Series(['foo 123', 'bar baz', mt.nan])
>>> ser.str.replace(r'[a-z]+', repl, regex=True).execute()
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 = md.Series(['One Two Three', 'Foo Bar Baz'])
>>> ser.str.replace(pat, repl, regex=True).execute()
0    tWO
1    bAR
dtype: object

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

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