You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars数据框中对字符串从右侧拆分n次(模拟Pandas rsplit)

在Polars中模拟Pandas的rsplit行为

你需要从字符串列的右侧拆分指定次数的内容,比如示例中用Pandas的str.rsplit("_", n=2, expand=True)实现的效果:

import polars as pl
import pandas as pd

df = pl.DataFrame(
    {
        "name": [
            "some_name_set_1",
            "some_name_set_1b",
            "some_other_name_set_2",
            "yet_another_name_set_2",
        ]
    }
)

# Pandas的实现效果
print(df.to_pandas()["name"].str.rsplit("_", n=2, expand=True))

输出:

0    1   2
0         some_name  set   1
1         some_name  set  1b
2   some_other_name  set   2
3  yet_another_name  set   2

Polars没有直接对应的rsplit表达式,可通过以下几种方式模拟该行为:

方法一:反转字符串 + 拆分 + 再次反转

核心思路是先反转字符串,用str.split从左侧拆分指定次数,再将拆分后的每个部分反转回来,最后调整列顺序:

result = df.with_columns(
    # 反转字符串后按"_"拆分2次
    pl.col("name").str.reverse().str.split("_", n=2).alias("split_parts")
).with_columns(
    # 拆分后的各部分重新反转,对应原字符串的拆分结果
    pl.col("split_parts").arr.get(2).str.reverse().alias("col0"),
    pl.col("split_parts").arr.get(1).str.reverse().alias("col1"),
    pl.col("split_parts").arr.get(0).str.reverse().alias("col2")
).drop("split_parts")

print(result)

输出:

shape: (4, 4)
┌────────────────────┬─────────────────┬─────┬─────┐
│ name               ┆ col0            ┆ col1┆ col2│
│ ---                ┆ ---             ┆ --- ┆ --- │
│ str                ┆ str             ┆ str ┆ str │
╞════════════════════╪═════════════════╪═════╪═════╡
│ some_name_set_1    ┆ some_name       ┆ set ┆ 1   │
│ some_name_set_1b   ┆ some_name       ┆ set ┆ 1b  │
│ some_other_name_set_2 ┆ some_other_name ┆ set ┆ 2   │
│ yet_another_name_set_2 ┆ yet_another_name ┆ set ┆ 2   │
└────────────────────┴─────────────────┴─────┴─────┘

方法二:正则表达式提取

通过正则匹配直接捕获最后两个下划线分隔的三部分,一次性拆分出目标内容:

result = df.with_columns(
    pl.col("name").str.extract(r"^(.*)_(.*)_(.*)$", group=[1,2,3]).alias("split_parts")
).unnest("split_parts").rename({"1": "col0", "2": "col1", "3": "col2"})

print(result)

输出与方法一完全一致。

方法三:嵌套使用str.rpartition(适合拆分次数少的场景)

Polars的str.rpartition可以从右侧拆分1次,嵌套使用即可实现多次拆分:

result = df.with_columns(
    # 第一次从右侧拆分,得到前半部分、分隔符、最后一部分
    pl.col("name").str.rpartition("_").alias("first_split")
).with_columns(
    # 对前半部分再次从右侧拆分
    pl.col("first_split").arr.get(0).str.rpartition("_").alias("second_split")
).with_columns(
    col0=pl.col("second_split").arr.get(0),
    col1=pl.col("second_split").arr.get(2),
    col2=pl.col("first_split").arr.get(2)
).drop("first_split", "second_split")

print(result)

同样可以得到预期的拆分结果。

内容的提问来源于stack exchange,提问作者blaylockbk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:37:05