pandas.Series.str.replace#

Series.str.replace(pat, repl, n=-1, case=None, flags=0, regex=False)[源代码]#

替换 Series/Index 中的模式/正则表达式的每个匹配项。

等同于 str.replace()re.sub() ,具体取决于 regex 的值。

Parameters:
patstr 或编译的 regex

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

replstr 或可调用对象

替换字符串或可调用对象。可调用对象传入匹配对象,并必须返回一个用于替换的字符串。请参阅 re.sub()

nint,默认为 -1(全部)

从开头开始进行替换的次数。

case布尔值,默认为 None

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

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

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

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

flagsint,默认为 0(无标志)。

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

regexbool,默认 False

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

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

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

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

Returns:
Series 或 Index 对象

pat 的所有匹配项都替换为 repl 后的对象的副本。

Raises:
ValueError
  • regex 为 False 且 repl 是可调用对象或 pat 是已编译的正则表达式时

  • pat 是已编译的正则表达式且设置了 caseflags

Notes

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

Examples

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

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

pat 是字符串且 regex 是 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() 对每个 pat 进行调用。该可调用对象应接受一个位置参数(一个正则表达式对象)并返回一个字符串。

以获得想法:

>>> 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