使用 str.extract 在 polars 中提取多个匹配项

Use str.extract to extract multiple matches in polars

df = pl.DataFrame(
    {
        "a": [
            "name=John, name=Billy",
            "name=Jeff",
            "name=Taylor",
        ]
    }
)

df.select(
    [
        pl.col("a").str.extract(r"name=(\w+)", 1),
    ]
)

我会得到 John, Jeff, Taylor 的系列。我想知道是否有办法在 extract_all(?) 的同时得到 Billy?我意识到这会改变结果系列的维度,但只是想知道这种方法是否可用。

你可以试试:

>>> df.select([
        pl.col('a').str.split(', ').explode()
                   .str.extract('name=(\w+)')
    ])

shape: (4, 1)
┌────────┐
│ a      │
│ ---    │
│ str    │
╞════════╡
│ John   │
├╌╌╌╌╌╌╌╌┤
│ Billy  │
├╌╌╌╌╌╌╌╌┤
│ Jeff   │
├╌╌╌╌╌╌╌╌┤
│ Taylor │
└────────┘

其实有一个str.extract_all方法。

df.select(
    [
        pl.col("a")
        .str.extract_all(r"name=\w+")
        .explode()
        .str.extract(r"name=(\w+)")
        .alias('names')
    ]
)
shape: (4, 1)
┌────────┐
│ names  │
│ ---    │
│ str    │
╞════════╡
│ John   │
├╌╌╌╌╌╌╌╌┤
│ Billy  │
├╌╌╌╌╌╌╌╌┤
│ Jeff   │
├╌╌╌╌╌╌╌╌┤
│ Taylor │
└────────┘