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

Polars DataFrame含指定字符串列的最优重命名方法探究

问题描述

我有一个列名,它的前缀和后缀会随函数参数变化,但列名里包含一段固定不变的内容。我需要将该列重命名为便于后续流程引用的名称,同时想找到定位目标列并完成重命名的最快方法。

我目前用for循环检查每个列名是否包含这段固定字符串,但觉得这不是基于筛选的最高效重命名方式。

解决方案及示例代码

我当前的实现代码如下:

import polars as pl

data = pl.DataFrame({
    "foo": [1, 2, 3, 4, 5],
    "bar": [5, 4, 3, 2, 1],
    "std_volatility_pct_21D": [0.1, 0.2, 0.15, 0.18, 0.16]
})

for col in data.columns:
    if "volatility_pct" in col:
        new_data = data.rename({col: "realized_volatility"})
性能测试

为对比不同方法的执行效率,我做了如下测试:

import polars as pl
import polars.selectors as cs

data = pl.DataFrame(
    {
        "foo": [1, 2, 3, 4, 5],
        "bar": [5, 4, 3, 2, 1],
        "std_volatility_pct_21D": [0.1, 0.2, 0.15, 0.18, 0.16],
    }
)


# 方法1:遍历列名匹配后重命名
def rename_volatility_column(data):
    for col in data.columns:
        if "volatility_pct" in col:
            return data.rename({col: "realized_volatility"})
    return data

# 方法2:使用选择器筛选后重命名
def adjust_volatility_column(data):
    return data.select(
        ~cs.contains("volatility_pct"),
        cs.contains("volatility_pct").alias("realized_volatility"),
    )


%timeit rename_volatility_column(data)
%timeit adjust_volatility_column(data)
# 方法3:使用lambda表达式批量重命名
%timeit data.rename(lambda col: "realized_volatility" if "volatility_pct" in col else col)

测试结果:

# 方法1
18.8 微秒 ± 636 纳秒/循环(7次运行的平均值±标准差,每次100,000个循环)

# 方法2
330 微秒 ± 11.7 微秒/循环(7次运行的平均值±标准差,每次1,000个循环)

# 方法3
133 微秒 ± 7.71 微秒/循环(7次运行的平均值±标准差,每次10,000个循环)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:13:38