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

如何在Python-polars中移除字符串列的最后N个字符?

Polars移除字符串列最后N个字符的正确实现

给定如下Polars DataFrame:

df = pl.DataFrame({"s": ["pear", None, "papaya", "dragonfruit"]})

需要移除列s中每个字符串的最后2个字符,但使用str.slice(2)的写法无法达成需求,错误代码如下:

df.with_columns(   
    pl.col("s").str.slice(2).alias("s_sliced"),
)

期望得到的结果是:

shape: (4, 2)
┌─────────────┬──────────┐
│ s           ┆ s_sliced │
│ ---         ┆ ---      │
│ str         ┆ str      │
╞═════════════╪══════════╡
│ pear        ┆ pe       │
│ null        ┆ null     │
│ papaya      ┆ papa     │
│ dragonfruit ┆ dragonfru│
└─────────────┴──────────┘

问题原因

str.slice(2)的作用是从字符串的**第2个索引位置(从0开始计数)**截取到末尾,而不是移除最后2个字符,这和需求完全相反。

正确解法

方法1:使用负数长度参数

Polars的str.slice支持负数长度,表示截取到倒数第N个字符为止,直接写长度为-2即可:

df.with_columns(
    pl.col("s").str.slice(length=-2).alias("s_sliced")
)

也可以明确指定起始索引为0,效果一致:

df.with_columns(
    pl.col("s").str.slice(0, -2).alias("s_sliced")
)

方法2:基于字符串长度计算截取长度

先通过str.lengths()获取每个字符串的长度,再减去要移除的字符数,作为截取的长度:

df.with_columns(
    pl.col("s").str.slice(0, pl.col("s").str.lengths() - 2).alias("s_sliced")
)

这种方式更灵活,适合需要动态调整移除字符数的场景,同时会自动保留原列的null值。

两种方法都能输出符合预期的结果,并且不会影响原列的null值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:21