发行:
我有一个列名,它可以根据一些函数参数更改其前缀和后缀,但列名的一部分始终是相同的.我需要将该列重命名为便于在不同工作流中引用的名称.我正在寻找找到我要查找的列并将其重命名为我想要的名称的最快方法.
我使用for循环来判断字符串的一部分是否在每一列中,但我认为这不是基于正则表达式过滤重命名列的最有效的方法.
解决方案+Reprex
这就是我想出来的:
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
%timeit rename_volatility_column(data)
# 2
def adjust_volatility_column(data):
return data.select(
~cs.contains("volatility_pct"),
cs.contains("volatility_pct").alias("realized_volatility"),
)
%timeit adjust_volatility_column(data)
# 3
%timeit data.rename(lambda col: "realized_volatility" if "volatility_pct" in col else col)
#1
18.8 µs ± 636 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
#2
330 µs ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
#3
133 µs ± 7.71 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)