Polars优化咨询:如何高效在第2个下划线后拆分字符串?
优化Polars中按第二个下划线拆分字符串的方法
你的当前方法通过拆分列表再切片拼接,在数据量较大时效率偏低,这里提供两种更高效的优化方案:
方案一:正则表达式直接提取
利用str.extract结合正则,直接匹配第二个下划线前的内容,无需生成完整拆分列表,性能最优:
import polars as pl result = pl.select( pl.lit("my_string_occurrence").str.extract(r"^([^_]+_[^_]+)") )
输出结果:
┌───────────┐ │ literal │ │ --- │ │ str │ ╞═══════════╡ │ my_string │ └───────────┘
正则说明:^([^_]+_[^_]+) 匹配字符串开头部分,其中[^_]+表示匹配任意非下划线字符,两次该表达式用_连接,正好对应前两个由下划线分隔的内容。
方案二:限制拆分次数的str.splitn
使用str.splitn(n, sep)最多拆分n次,避免拆分所有下划线,减少列表操作的开销:
import polars as pl result = pl.select( pl.lit("my_string_occurrence").str.splitn(3, "_") .list.slice(0, 2) .list.join("_") )
splitn(3, "_")会将字符串拆分为最多3部分(前两个下划线分隔的内容 + 剩余所有内容),再取前两部分拼接即可,效率比原str.split("_")更高。
内容的提问来源于stack exchange,提问作者yz_jc
相关产品推荐
相关产品推荐

