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
相关产品推荐
相关产品推荐

