Polars中基于另一字符串列长度切片字符串列的报错求助
解决Polars中动态偏移量字符串切片的错误
错误原因
你使用的Polars 0.19.17版本里,str.slice方法的offset参数仅支持静态整数,无法直接传入表达式(比如pl.col('col2').str.len_chars()这种动态计算的列值),因此触发了类型错误。
解决方案
有两种可行的处理方式:
方案1:升级Polars版本(推荐)
Polars从0.20版本开始,已支持str.slice的offset和length参数接受表达式。升级后直接调整代码即可:
df.with_columns( # 从col2的长度位置开始切片,默认切到字符串末尾 pl.col("col1").str.slice(pl.col('col2').str.len_chars()).alias("sliced_col1") )
如果需要指定切片长度,也可以用关键字参数:
df.with_columns( pl.col("col1").str.slice( offset=pl.col('col2').str.len_chars(), length=5 # 自定义切片长度,也可传入表达式 ).alias("sliced_col1") )
方案2:使用map_elements兼容旧版本
如果暂时无法升级,可通过map_elements逐行处理实现需求:
df.with_columns( pl.struct(["col1", "col2"]).map_elements( lambda row: row["col1"][len(row["col2"]):], return_dtype=pl.String ).alias("sliced_col1") )
注意:这种方法是逐行遍历处理,数据量较大时性能会低于原生表达式,优先推荐升级版本。
内容的提问来源于stack exchange,提问作者Mustafa Elec
相关产品推荐
相关产品推荐

