重命名的区别!并在 Julia 中用新的 DataFrame 重命名?

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)

Ste*_*ski 5

表单rename!修改参数数据框,而rename版本则使用新列名构造新数据框。由于您正在构建数据框,然后立即重命名其列,因此使用rename!. 如果存在对内部数据框的引用,而您不想以可见的方式修改该引用,那么您将需要使用非变异函数rename。差异可以在这里看到:

\n\n
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\n
Run 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 论坛上开始讨论有关构建数据框架的便捷方法。

\n