使用 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 │
└────────┘
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 │
└────────┘