dask.dataframe.Series.str.replace
dask.dataframe.Series.str.replace¶
- dataframe.Series.str.replace(pat: str | re.Pattern, repl: str | Callable, n: int = - 1, case: bool | None = None, flags: int = 0, regex: bool = False)¶
替换 Series/Index 中每个出现的模式/正则表达式。
此文档字符串是从 pandas.core.strings.accessor.StringMethods.replace 复制而来的。
Dask 版本可能存在一些不一致性。
等同于
str.replace()或re.sub(),取决于正则表达式的值。- 参数
- pat字符串或编译的正则表达式
字符串可以是字符序列或正则表达式。
- repl字符串或可调用对象
替换字符串或可调用对象。可调用对象会被传递正则表达式匹配对象,并必须返回一个用于替换的字符串。参见
re.sub()。- nint, 默认 -1 (全部)
从开始进行替换的数量。
- 案例bool, 默认 None
确定替换是否区分大小写:
如果为 True,则区分大小写(如果 pat 是字符串,则为默认值)
设置为 False 以忽略大小写
如果 pat 是已编译的正则表达式,则不能设置。
- 标志int, 默认值为 0 (无标志)
正则表达式模块标志,例如 re.IGNORECASE。如果 pat 是已编译的正则表达式,则不能设置。
- 正则表达式bool, 默认 False
确定传入的模式是否为正则表达式:
如果为 True,则假设传入的模式是正则表达式。
如果为 False,则将模式视为字面字符串
如果 pat 是已编译的正则表达式或 repl 是可调用的,则不能设置为 False。
- 返回
- 对象的系列或索引
一个对象的副本,其中所有匹配 pat 的出现都被 repl 替换。
- Raises
- ValueError
如果 regex 为 False 且 repl 是一个可调用对象或 pat 是一个已编译的正则表达式
如果 pat 是一个已编译的正则表达式,并且设置了 case 或 flags
注释
当 pat 是一个已编译的正则表达式时,所有标志应包含在已编译的正则表达式中。使用已编译的正则表达式时,使用 case、flags 或 regex=False 将引发错误。
示例
当 pat 是一个字符串且 regex 为 True 时,给定的 pat 被编译为正则表达式。当 repl 是一个字符串时,它替换匹配的正则表达式模式,如同使用
re.sub()。Series 中的 NaN 值保持不变:>>> 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 是一个可调用对象时,它会在每个 pat 上使用
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