在 Julia 中重命名多列

Renaming multiple column in Julia

我正在尝试使用以下代码重命名数据框列-

function _process_col(df)
    for col in names(df)
        print(col)
        rename!(df, :col => _clean_col_name(col))
    end
    return df
end

但是会抛出数据帧中不存在 col 的错误。 rename!(df, :col => _clean_col_name(col)) 将 col 视为字符串而不是变量。

注意 - _clean_col_name(col) 是处理列名的自定义函数

有没有其他方法可以做到这一点?

function _process_col(df)
    array = [];
    for col in names(df)
        push!(array,_clean_col_name(col))
    end
        rename!(df, Symbol.(array))
    return df
end

其中 array 是您的列的新名称列表适用于您的情况。

如果要将 _clean_col_name 应用于所有列,请使用以下形式:

julia> using DataFrames

julia> df = DataFrame(rand(3, 5), :auto)
3×5 DataFrame
 Row │ x1         x2        x3        x4        x5
     │ Float64    Float64   Float64   Float64   Float64
─────┼────────────────────────────────────────────────────
   1 │ 0.0856504  0.677317  0.8402    0.630016  0.815347
   2 │ 0.584487   0.997837  0.252574  0.659241  0.0699587
   3 │ 0.196169   0.488646  0.689678  0.554855  0.321897

julia> _clean_col_name(x) = uppercase(x)
_clean_col_name (generic function with 1 method)

julia> rename!(_clean_col_name, df)
3×5 DataFrame
 Row │ X1         X2        X3        X4        X5
     │ Float64    Float64   Float64   Float64   Float64
─────┼────────────────────────────────────────────────────
   1 │ 0.0856504  0.677317  0.8402    0.630016  0.815347
   2 │ 0.584487   0.997837  0.252574  0.659241  0.0699587
   3 │ 0.196169   0.488646  0.689678  0.554855  0.321897

如果你想坚持你的功能,只需删除 col 前面的 : 正如@BatWannaBe 建议的那样:

julia> function _process_col(df)
           for col in names(df)
               print(col)
               rename!(df, col => _clean_col_name(col))
           end
           return df
       end
_process_col (generic function with 1 method)

julia> df = DataFrame(rand(3, 5), :auto)
3×5 DataFrame
 Row │ x1        x2         x3        x4        x5
     │ Float64   Float64    Float64   Float64   Float64
─────┼───────────────────────────────────────────────────
   1 │ 0.445679  0.0197894  0.605917  0.668544  0.979025
   2 │ 0.631891  0.185474   0.136334  0.218718  0.365156
   3 │ 0.115752  0.308683   0.273192  0.638987  0.195281

julia> _process_col(df)
x1x2x3x4x53×5 DataFrame
 Row │ X1        X2         X3        X4        X5
     │ Float64   Float64    Float64   Float64   Float64
─────┼───────────────────────────────────────────────────
   1 │ 0.445679  0.0197894  0.605917  0.668544  0.979025
   2 │ 0.631891  0.185474   0.136334  0.218718  0.365156
   3 │ 0.115752  0.308683   0.273192  0.638987  0.195281

请检查 rename! 的文档字符串以查看其他可用选项(因为还有更多选项),仅举一个例子:

julia> df = DataFrame(rand(3, 5), :auto)
3×5 DataFrame
 Row │ x1         x2         x3        x4        x5
     │ Float64    Float64    Float64   Float64   Float64
─────┼────────────────────────────────────────────────────
   1 │ 0.242173   0.0401673  0.674665  0.27598   0.338189
   2 │ 0.0497058  0.958139   0.707002  0.258894  0.623699
   3 │ 0.477812   0.5068     0.584878  0.198547  0.713736

julia> rename!(df, (names(df) .=> _clean_col_name.(names(df)))...)
3×5 DataFrame
 Row │ X1         X2         X3        X4        X5
     │ Float64    Float64    Float64   Float64   Float64
─────┼────────────────────────────────────────────────────
   1 │ 0.242173   0.0401673  0.674665  0.27598   0.338189
   2 │ 0.0497058  0.958139   0.707002  0.258894  0.623699
   3 │ 0.477812   0.5068     0.584878  0.198547  0.713736