Fra*_*art 3 rename dataframe julia
在 Julia 中构建新的rename和之间有什么区别吗?我相信一般来说修改现有对象是理想的,因为它修改其参数而不在内存中生成新对象。rename!DataFrameDataFrame rename!
但由于内存中尚不存在任何对象似乎rename是合适的。
using DataFrames
df1 = rename( DataFrame(rand((100,2))), [:x1, :x2], [:x, :y])
df2 = rename!(DataFrame(rand((100,2))), [:x1, :x2], [:x, :y])
# Ideal formulation not using rename (currently no matching method)
df0 = DataFrame(rand((100,2)), [:x, :y])
Run Code Online (Sandbox Code Playgroud)
表单rename!修改参数数据框,而rename版本则使用新列名构造新数据框。由于您正在构建数据框,然后立即重命名其列,因此使用rename!. 如果存在对内部数据框的引用,而您不想以可见的方式修改该引用,那么您将需要使用非变异函数rename。差异可以在这里看到:
julia> df0 = DataFrame(rand((3,2)))\n3\xc3\x972 DataFrames.DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 x1 \xe2\x94\x82 x2 \xe2\x94\x82\n\xe2\x94\x9c\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\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\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 0.625971 \xe2\x94\x82 0.401812 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 0.316224 \xe2\x94\x82 0.208431 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 0.331206 \xe2\x94\x82 0.466665 \xe2\x94\x82\n\njulia> df1 = rename(df0, [:x1, :x2], [:x, :y])\n3\xc3\x972 DataFrames.DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 x \xe2\x94\x82 y \xe2\x94\x82\n\xe2\x94\x9c\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\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\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 0.625971 \xe2\x94\x82 0.401812 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 0.316224 \xe2\x94\x82 0.208431 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 0.331206 \xe2\x94\x82 0.466665 \xe2\x94\x82\n\njulia> df0\n3\xc3\x972 DataFrames.DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 x1 \xe2\x94\x82 x2 \xe2\x94\x82\n\xe2\x94\x9c\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\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\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 0.625971 \xe2\x94\x82 0.401812 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 0.316224 \xe2\x94\x82 0.208431 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 0.331206 \xe2\x94\x82 0.466665 \xe2\x94\x82\n\njulia> df0 === df1\nfalse\n\njulia> df2 = rename!(df0, [:x1, :x2], [:x, :y])\n3\xc3\x972 DataFrames.DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 x \xe2\x94\x82 y \xe2\x94\x82\n\xe2\x94\x9c\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\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\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 0.625971 \xe2\x94\x82 0.401812 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 0.316224 \xe2\x94\x82 0.208431 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 0.331206 \xe2\x94\x82 0.466665 \xe2\x94\x82\n\njulia> df0\n3\xc3\x972 DataFrames.DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 x \xe2\x94\x82 y \xe2\x94\x82\n\xe2\x94\x9c\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\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\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 0.625971 \xe2\x94\x82 0.401812 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 0.316224 \xe2\x94\x82 0.208431 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 0.331206 \xe2\x94\x82 0.466665 \xe2\x94\x82\n\njulia> df0 === df2\ntrue\nRun Code Online (Sandbox Code Playgroud)\n\n返回的数据框rename是一个具有不同列标签 \xe2\x80\x93\xc2\xa0i.e 的新数据框。df1 !== df0\xe2\x80\x93\xc2\xa0 而返回的数据帧rename!是使用修改后的列名称 \xe2\x80\x93\xc2\xa0 传入的相同数据帧,即 df1 === df0。您可能想在Julia 的 Discourse 论坛上开始讨论有关构建数据框架的便捷方法。