2017-04-07 17 views
2

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]) 

答えて

3

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によって返されたデータフレームは異なる列ラベルを持つ新しいデータフレームである - rename!によって返されたデータフレームが変更された列で渡された同じデータフレームであるのに対し、 - すなわちdf1 !== df0名前 - つまりdf1 === df0。データフレームを作成するための便利な方法については、Julia's Discourse forumに関するディスカッションを開始することをお勧めします。

関連する問題