2017-04-07 6 views
2

Julia에서 DataFrame을 새로 만들 때 renamerename! 사이에 차이가 있습니까? 나는 기존의 것을 수정할 때 일반적으로 믿는다. DataFramerename!은 메모리에 새로운 객체를 생성하지 않고 그것의 인수를 수정하기 때문에 이상적이다.이름 바꾸기의 차이점! Julia에서 새 DataFrame으로 이름을 바꿉니 까?

그러나 메모리에 개체가 아직 없기 때문에 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]) 

답변

3

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에서 시작하는 것이 좋습니다.