pandas.Series.str.replace#

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

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

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

参数
pat字符串或已编译的正则表达式

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

repl字符串或可调用

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

n整型,默认为-1(全部)

要从头开始进行的替换数量。

case布尔默认为无

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

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

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

  • 在以下情况下无法设置 pat 是编译后的正则表达式。

flagsInt,默认为0(无标志)

Regex模块标志,例如re.IGNORECASE。在以下情况下无法设置 pat 是编译后的正则表达式。

regex布尔值,默认为True

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

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

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

  • 在以下情况下不能设置为False pat 是已编译的正则表达式或 repl 是一个可调用的。

0.23.0 新版功能.

退货
对象的系列或索引

具有所有匹配项的对象的副本 pat 替换为 repl

加薪
ValueError
  • 如果 regex 是假的,而且 repl 是可调用的或 pat 是已编译的正则表达式

  • 如果 pat 是已编译的正则表达式,并且 caseflags 已设置

注意事项

什么时候 pat 是已编译的正则表达式,则所有标志都应包含在已编译的正则表达式中。使用 caseflags ,或 regex=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 是一个字符串,并且 regex 是假的,每一个 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 是可调用的,则它在每个 pat 使用 re.sub() 。Callable应该有一个位置参数(regex对象)并返回一个字符串。

要了解这一想法:

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