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

如何用Polars中一个DataFrame的偏移信息提取另一个的子串列?

Polars优化子串提取方案(替代循环实现)

直接利用Polars的表达式批量生成能力,避免循环逐列处理,充分发挥向量化优势,代码更简洁高效:

1. 构造测试样例

import polars as pl

# 示例字符串DataFrame
df_strs = pl.DataFrame({
    "Col_A": ["abcdefgh", "ijklmnop", "qrstuvwx"],
    "Col_B": ["12345678", "90123456", "78901234"]
})

# 示例规则配置DataFrame
df_offsets = pl.DataFrame({
    "Reference_Col": ["Col_A", "Col_A", "Col_B"],
    "Offset": [2, 5, 1],
    "Length": [3, 2, 4],
    "Alias": ["A_sub1", "A_sub2", "B_sub1"]
})

2. 优化实现代码

# 批量生成子串提取表达式
extract_exprs = [
    pl.col(ref_col).str.slice(offset, length).alias(alias)
    for ref_col, offset, length, alias in df_offsets.rows()
]

# 一次性添加所有新列
result_df = df_strs.with_columns(extract_exprs)

# 查看结果
print(result_df)

3. 为什么这更符合Polars风格?

  • 避免冗余拷贝:循环中多次调用with_columns会生成多个中间DataFrame,而一次性传入所有表达式只需要一次计算,减少内存开销
  • 向量化处理:Polars对批量表达式的处理是完全向量化的,比循环逐行/逐列处理性能高一个量级
  • 代码更简洁:用列表推导式批量生成规则,逻辑一目了然,符合Polars声明式编程的设计思路

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:09