在Julia中重命名多个列

3

我试图使用以下代码重命名数据框列:

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) 是一个自定义函数,用于处理列名。
有没有其他的替代方法可以做到这一点?

2
等一下,你为什么写了符号 :col?不应该是循环变量 col 吗? - BatWannaBe
2个回答

7
如果你想将 _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
─────┼────────────────────────────────────────────────────
   10.0856504  0.677317  0.8402    0.630016  0.815347
   20.584487   0.997837  0.252574  0.659241  0.0699587
   30.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
─────┼────────────────────────────────────────────────────
   10.0856504  0.677317  0.8402    0.630016  0.815347
   20.584487   0.997837  0.252574  0.659241  0.0699587
   30.196169   0.488646  0.689678  0.554855  0.321897

如果您想保留您的函数,请按照@BatWannaBe的建议,只需在col前面删除冒号:即可。
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
─────┼───────────────────────────────────────────────────
   10.445679  0.0197894  0.605917  0.668544  0.979025
   20.631891  0.185474   0.136334  0.218718  0.365156
   30.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
─────┼───────────────────────────────────────────────────
   10.445679  0.0197894  0.605917  0.668544  0.979025
   20.631891  0.185474   0.136334  0.218718  0.365156
   30.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
─────┼────────────────────────────────────────────────────
   10.242173   0.0401673  0.674665  0.27598   0.338189
   20.0497058  0.958139   0.707002  0.258894  0.623699
   30.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
─────┼────────────────────────────────────────────────────
   10.242173   0.0401673  0.674665  0.27598   0.338189
   20.0497058  0.958139   0.707002  0.258894  0.623699
   30.477812   0.5068     0.584878  0.198547  0.713736

6
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 是用于列新名称列表的参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接