polars.Expr.str.replace_many#

Expr.str.replace_many(patterns: IntoExpr | Mapping[str, str], replace_with: IntoExpr | NoDefault = <no_default>, *, ascii_case_insensitive: bool = False) Expr[source]#

Use the Aho-Corasick algorithm to replace many matches.

Parameters:
patterns

String patterns to search and replace. Accepts expression input. Strings are parsed as column names, and other non-expression inputs are parsed as literals. Also accepts a mapping of patterns to their replacement as syntactic sugar for replace_many(pl.Series(mapping.keys()), pl.Series(mapping.values())).

replace_with

Strings to replace where a pattern was a match. Accepts expression input. Non-expression inputs are parsed as literals. Length must match the length of patterns or have length 1. This can be broadcasted, so it supports many:one and many:many.

ascii_case_insensitive

Enable ASCII-aware case-insensitive matching. When this option is enabled, searching will be performed without respect to case for ASCII letters (a-z and A-Z) only.

Notes

This method supports matching on string literals only, and does not support regular expression matching.

Examples

Replace many patterns by passing sequences of equal length to the patterns and replace_with parameters.

>>> _ = pl.Config.set_fmt_str_lengths(100)
>>> _ = pl.Config.set_tbl_width_chars(110)
>>> df = pl.DataFrame(
...     {
...         "lyrics": [
...             "Everybody wants to rule the world",
...             "Tell me what you want, what you really really want",
...             "Can you feel the love tonight",
...         ]
...     }
... )
>>> df.with_columns(
...     pl.col("lyrics")
...     .str.replace_many(
...         ["me", "you"],
...         ["you", "me"],
...     )
...     .alias("confusing")
... )
shape: (3, 2)
┌────────────────────────────────────────────────────┬───────────────────────────────────────────────────┐
│ lyrics                                             ┆ confusing                                         │
│ ---                                                ┆ ---                                               │
│ str                                                ┆ str                                               │
╞════════════════════════════════════════════════════╪═══════════════════════════════════════════════════╡
│ Everybody wants to rule the world                  ┆ Everybody wants to rule the world                 │
│ Tell me what you want, what you really really want ┆ Tell you what me want, what me really really want │
│ Can you feel the love tonight                      ┆ Can me feel the love tonight                      │
└────────────────────────────────────────────────────┴───────────────────────────────────────────────────┘

Broadcast a replacement for many patterns by passing a string or a sequence of length 1 to the replace_with parameter.

>>> _ = pl.Config.set_fmt_str_lengths(100)
>>> df = pl.DataFrame(
...     {
...         "lyrics": [
...             "Everybody wants to rule the world",
...             "Tell me what you want, what you really really want",
...             "Can you feel the love tonight",
...         ]
...     }
... )
>>> df.with_columns(
...     pl.col("lyrics")
...     .str.replace_many(
...         ["me", "you", "they"],
...         "",
...     )
...     .alias("removes_pronouns")
... )
shape: (3, 2)
┌────────────────────────────────────────────────────┬────────────────────────────────────────────┐
│ lyrics                                             ┆ removes_pronouns                           │
│ ---                                                ┆ ---                                        │
│ str                                                ┆ str                                        │
╞════════════════════════════════════════════════════╪════════════════════════════════════════════╡
│ Everybody wants to rule the world                  ┆ Everybody wants to rule the world          │
│ Tell me what you want, what you really really want ┆ Tell  what  want, what  really really want │
│ Can you feel the love tonight                      ┆ Can  feel the love tonight                 │
└────────────────────────────────────────────────────┴────────────────────────────────────────────┘

Passing a mapping with patterns and replacements is also supported as syntactic sugar.

>>> _ = pl.Config.set_fmt_str_lengths(100)
>>> _ = pl.Config.set_tbl_width_chars(110)
>>> df = pl.DataFrame(
...     {
...         "lyrics": [
...             "Everybody wants to rule the world",
...             "Tell me what you want, what you really really want",
...             "Can you feel the love tonight",
...         ]
...     }
... )
>>> mapping = {"me": "you", "you": "me", "want": "need"}
>>> df.with_columns(
...     pl.col("lyrics").str.replace_many(mapping).alias("confusing")
... )
shape: (3, 2)
┌────────────────────────────────────────────────────┬───────────────────────────────────────────────────┐
│ lyrics                                             ┆ confusing                                         │
│ ---                                                ┆ ---                                               │
│ str                                                ┆ str                                               │
╞════════════════════════════════════════════════════╪═══════════════════════════════════════════════════╡
│ Everybody wants to rule the world                  ┆ Everybody needs to rule the world                 │
│ Tell me what you want, what you really really want ┆ Tell you what me need, what me really really need │
│ Can you feel the love tonight                      ┆ Can me feel the love tonight                      │
└────────────────────────────────────────────────────┴───────────────────────────────────────────────────┘