Julia Dataframes의 중복 된 열

Aug 25 2020

Python Pandas 및 R에서는 중복 된 열을 쉽게 제거 할 수 있습니다. 데이터를로드하고 열 이름을 할당 한 다음 중복되지 않은 열을 선택하기 만하면됩니다.

Julia Dataframes로 이러한 데이터를 처리하는 모범 사례는 무엇입니까? 여기에서는 중복 된 열 이름을 지정할 수 없습니다. 들어오는 데이터를 더 많이 마사지하고 데이터 프레임을 구성하기 전에 이러한 데이터를 제거하는 것이 유일한 방법이라는 것을 이해합니다.

문제는 들어오는 데이터가 아닌 이미 구성된 데이터 프레임에서 중복 된 열을 처리하는 것이 거의 항상 더 쉽다는 것입니다.

UPD : 중복 된 열 이름을 의미했습니다. 열 이름 (따라서 데이터)이 반복 될 수있는 원시 데이터에서 데이터 프레임을 만듭니다.

UPD2 : Python 예제가 추가되었습니다.

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame(np.hstack([np.zeros((4,1)), np.ones((4,2))]), columns=["a", "b", "b"])
>>> df
     a    b    b
0  0.0  1.0  1.0
1  0.0  1.0  1.0
2  0.0  1.0  1.0
3  0.0  1.0  1.0
>>> df.loc[:, ~df.columns.duplicated()]
     a    b
0  0.0  1.0
1  0.0  1.0
2  0.0  1.0
3  0.0  1.0

Float32 행렬에서 Julia Dataframe을 만든 다음 벡터에서 열 이름을 할당합니다. 여기서 중복 된 이름 (이미 데이터 프레임에 있음)을 가진 열을 제거해야합니다. 그것이 기초 데이터의 본질이며 때로는 멍청이가 있고 때로는 생성에 대한 통제권이 없습니다.

답변

2 BogumiłKamiński Aug 24 2020 at 23:38

이것은 당신이 찾고있는 것입니까 (당신의 설명에서 100 % 확신하지 못했습니다-이것이 당신이 원하는 것이 아니라면 예를 들어 질문을 업데이트하십시오) :

julia> df = DataFrame([zeros(4,3) ones(4,5)])
4×8 DataFrame
│ Row │ x1      │ x2      │ x3      │ x4      │ x5      │ x6      │ x7      │ x8      │
│     │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │
├─────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ 1   │ 0.0     │ 0.0     │ 0.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │
│ 2   │ 0.0     │ 0.0     │ 0.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │
│ 3   │ 0.0     │ 0.0     │ 0.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │
│ 4   │ 0.0     │ 0.0     │ 0.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │ 1.0     │

julia> DataFrame(unique(last, pairs(eachcol(df))))
4×2 DataFrame
│ Row │ x1      │ x4      │
│     │ Float64 │ Float64 │
├─────┼─────────┼─────────┤
│ 1   │ 0.0     │ 1.0     │
│ 2   │ 0.0     │ 1.0     │
│ 3   │ 0.0     │ 1.0     │
│ 4   │ 0.0     │ 1.0     │

편집하다

열 이름을 중복 제거하려면 makeunique키워드 인수를 사용하십시오 .

julia> DataFrame(rand(3,4), [:x, :x, :x, :x], makeunique=true)
3×4 DataFrame
│ Row │ x         │ x_1      │ x_2      │ x_3       │
│     │ Float64   │ Float64  │ Float64  │ Float64   │
├─────┼───────────┼──────────┼──────────┼───────────┤
│ 1   │ 0.410494  │ 0.775563 │ 0.819916 │ 0.0520466 │
│ 2   │ 0.0503997 │ 0.427499 │ 0.262234 │ 0.965793  │
│ 3   │ 0.838595  │ 0.996305 │ 0.833607 │ 0.953539  │

2 편집

따라서 데이터 프레임을 만들 때 열 이름에 액세스 할 수있는 것 같습니다. 이 경우 다음을 수행합니다.

julia> mat = [ones(3,1) zeros(3,2)]
3×3 Array{Float64,2}:
 1.0  0.0  0.0
 1.0  0.0  0.0
 1.0  0.0  0.0

julia> cols = ["a", "b", "b"]
3-element Array{String,1}:
 "a"
 "b"
 "b"

julia> df = DataFrame(mat, cols, makeunique=true)
3×3 DataFrame
│ Row │ a       │ b       │ b_1     │
│     │ Float64 │ Float64 │ Float64 │
├─────┼─────────┼─────────┼─────────┤
│ 1   │ 1.0     │ 0.0     │ 0.0     │
│ 2   │ 1.0     │ 0.0     │ 0.0     │
│ 3   │ 1.0     │ 0.0     │ 0.0     │

julia> select!(df, unique(cols))
3×2 DataFrame
│ Row │ a       │ b       │
│     │ Float64 │ Float64 │
├─────┼─────────┼─────────┤
│ 1   │ 1.0     │ 0.0     │
│ 2   │ 1.0     │ 0.0     │
│ 3   │ 1.0     │ 0.0     │