重命名之间的区别!并在Julia中重新命名为新的DataFrame?

重命名之间的区别!并在Julia中重新命名为新的DataFrame?

问题描述:

在Julia中构建新的DataFrame时,renamerename!之间是否有区别?我相信一般修改现有的DataFramerename!是理想的,因为它修改了它的参数而不在内存中生成新的对象。重命名之间的区别!并在Julia中重新命名为新的DataFrame?

但由于内存中没有对象,因此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]) 

rename!形式修改参数数据帧而rename版本构建新的列名的新数据帧。由于您正在构建数据框,然后立即重命名其列,因此使用rename!更安全,更高效。如果存在您不想以可见方式修改的内部数据框的引用,那么您希望使用非突变rename函数。的差在这里可以看到:

julia> df0 = DataFrame(rand((3,2))) 
3×2 DataFrames.DataFrame 
│ Row │ x1  │ x2  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df1 = rename(df0, [:x1, :x2], [:x, :y]) 
3×2 DataFrames.DataFrame 
│ Row │ x  │ y  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 
3×2 DataFrames.DataFrame 
│ Row │ x1  │ x2  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 === df1 
false 

julia> df2 = rename!(df0, [:x1, :x2], [:x, :y]) 
3×2 DataFrames.DataFrame 
│ Row │ x  │ y  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 
3×2 DataFrames.DataFrame 
│ Row │ x  │ y  │ 
├─────┼──────────┼──────────┤ 
│ 1 │ 0.625971 │ 0.401812 │ 
│ 2 │ 0.316224 │ 0.208431 │ 
│ 3 │ 0.331206 │ 0.466665 │ 

julia> df0 === df2 
true 

通过rename返回的数据帧是不同的列标签新的数据帧 - 即df1 !== df0 - 而由rename!返回的数据帧是具有修饰的柱子以相同的数据帧名称 - 即df1 === df0。您可能要开始讨论Julia's Discourse forum关于构造数据框的便捷方法。