如何在Polars DataFrame的paths列split后选取列表最后一项?
解决Polars中分割文件路径并提取最后一项的问题
在Polars的懒加载模式(pl.scan_csv)下,不能直接用Python列表的[-1]索引操作分割后的列,得用Polars内置的数组/字符串表达式方法,以下是几种可行方案:
方法1:分割后取数组最后一项
利用str.split将路径转为数组,再通过arr.last()提取最后一个元素:
import polars as pl # 加载数据并处理 lazy_df = pl.scan_csv("your_dataset.csv") result_df = lazy_df.with_columns( filename=pl.col("paths").str.split("/").arr.last() ).collect()
方法2:从右侧单次分割后提取
用str.rsplit只从右侧分割一次,再取最后一个元素,这种方法比全量分割更高效:
result_df = lazy_df.with_columns( filename=pl.col("paths").str.rsplit("/", n=1).arr.last() ).collect()
方法3:正则表达式匹配
用str.extract配合正则直接匹配最后一个斜杠后的内容:
result_df = lazy_df.with_columns( filename=pl.col("paths").str.extract(r"[^/]+$") ).collect()
为什么之前的方法失败?
pl.scan_csv返回的是LazyFrame,列数据是Polars的表达式对象,不是Python原生列表,因此无法直接使用[-1]这类Python列表索引操作,必须通过Polars提供的arr.xxx系列方法来操作数组类型的列。
内容的提问来源于stack exchange,提问作者sahuno
相关产品推荐
相关产品推荐

