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 是已编译的正则表达式,并且 case 或 flags 已设置
注意事项
什么时候 pat 是已编译的正则表达式,则所有标志都应包含在已编译的正则表达式中。使用 case , flags ,或 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