重命名 Julia 中的多列

mlh*_*hub 3 dataframe julia

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

function _process_col(df)
    for col in names(df)
        print(col)
        rename!(df, :col => _clean_col_name(col))
    end
    return df
end
Run Code Online (Sandbox Code Playgroud)

但会引发错误,表明数据框中不存在 col。rename!(df, :col => _clean_col_name(col))将 col 视为字符串而不是变量。

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

有什么替代方法可以做到这一点吗?

Bog*_*ski 7

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

\n
julia> using DataFrames\n\njulia> df = DataFrame(rand(3, 5), :auto)\n3\xc3\x975 DataFrame\n Row \xe2\x94\x82 x1         x2        x3        x4        x5\n     \xe2\x94\x82 Float64    Float64   Float64   Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.0856504  0.677317  0.8402    0.630016  0.815347\n   2 \xe2\x94\x82 0.584487   0.997837  0.252574  0.659241  0.0699587\n   3 \xe2\x94\x82 0.196169   0.488646  0.689678  0.554855  0.321897\n\njulia> _clean_col_name(x) = uppercase(x)\n_clean_col_name (generic function with 1 method)\n\njulia> rename!(_clean_col_name, df)\n3\xc3\x975 DataFrame\n Row \xe2\x94\x82 X1         X2        X3        X4        X5\n     \xe2\x94\x82 Float64    Float64   Float64   Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.0856504  0.677317  0.8402    0.630016  0.815347\n   2 \xe2\x94\x82 0.584487   0.997837  0.252574  0.659241  0.0699587\n   3 \xe2\x94\x82 0.196169   0.488646  0.689678  0.554855  0.321897\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
julia> function _process_col(df)\n           for col in names(df)\n               print(col)\n               rename!(df, col => _clean_col_name(col))\n           end\n           return df\n       end\n_process_col (generic function with 1 method)\n\njulia> df = DataFrame(rand(3, 5), :auto)\n3\xc3\x975 DataFrame\n Row \xe2\x94\x82 x1        x2         x3        x4        x5\n     \xe2\x94\x82 Float64   Float64    Float64   Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.445679  0.0197894  0.605917  0.668544  0.979025\n   2 \xe2\x94\x82 0.631891  0.185474   0.136334  0.218718  0.365156\n   3 \xe2\x94\x82 0.115752  0.308683   0.273192  0.638987  0.195281\n\njulia> _process_col(df)\nx1x2x3x4x53\xc3\x975 DataFrame\n Row \xe2\x94\x82 X1        X2         X3        X4        X5\n     \xe2\x94\x82 Float64   Float64    Float64   Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.445679  0.0197894  0.605917  0.668544  0.979025\n   2 \xe2\x94\x82 0.631891  0.185474   0.136334  0.218718  0.365156\n   3 \xe2\x94\x82 0.115752  0.308683   0.273192  0.638987  0.195281\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
julia> df = DataFrame(rand(3, 5), :auto)\n3\xc3\x975 DataFrame\n Row \xe2\x94\x82 x1         x2         x3        x4        x5\n     \xe2\x94\x82 Float64    Float64    Float64   Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.242173   0.0401673  0.674665  0.27598   0.338189\n   2 \xe2\x94\x82 0.0497058  0.958139   0.707002  0.258894  0.623699\n   3 \xe2\x94\x82 0.477812   0.5068     0.584878  0.198547  0.713736\n\njulia> rename!(df, (names(df) .=> _clean_col_name.(names(df)))...)\n3\xc3\x975 DataFrame\n Row \xe2\x94\x82 X1         X2         X3        X4        X5\n     \xe2\x94\x82 Float64    Float64    Float64   Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.242173   0.0401673  0.674665  0.27598   0.338189\n   2 \xe2\x94\x82 0.0497058  0.958139   0.707002  0.258894  0.623699\n   3 \xe2\x94\x82 0.477812   0.5068     0.584878  0.198547  0.713736\n
Run Code Online (Sandbox Code Playgroud)\n


Vyu*_*wal 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
Run Code Online (Sandbox Code Playgroud)

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