Dataframe Julia数据帧中的重复列

Dataframe Julia数据帧中的重复列,dataframe,julia,Dataframe,Julia,在Python和R中,可以轻松地消除重复的列—只需加载数据、分配列名并选择那些不重复的列 使用Julia Dataframes处理此类数据的最佳实践是什么?此处不允许指定重复的列名。我知道唯一的方法是对传入的数据进行更多的处理,并在构建数据帧之前除去这些数据 问题是,在已经构建的数据框架中处理重复列几乎总是比在传入数据中更容易 UPD:我指的是重复的列名。我从原始数据构建dataframe,其中可以重复列名(从而重复数据) UPD2:添加了Python示例 >>> import

在Python和R中,可以轻松地消除重复的列—只需加载数据、分配列名并选择那些不重复的列

使用Julia Dataframes处理此类数据的最佳实践是什么?此处不允许指定重复的列名。我知道唯一的方法是对传入的数据进行更多的处理,并在构建数据帧之前除去这些数据

问题是,在已经构建的数据框架中处理重复列几乎总是比在传入数据中更容易

UPD:我指的是重复的列名。我从原始数据构建dataframe,其中可以重复列名(从而重复数据)

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中)的列的地方。这就是基础数据的性质,有时有DUP,有时没有,我无法控制其创建。

这是您正在寻找的东西吗(从您的描述中我不是100%确定-如果这不是您想要的,请用一个示例更新问题):

编辑 要消除列名重复,请使用
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     │

抱歉说不清楚,我指的是列名。相应地更新了问题。啊-那么这就更容易了-我发布了一个更新。如果我需要删除这些重复的列而不是重命名它们怎么办?事实上,这是最初的问题。这取决于数据的来源。有31种方法可以创建
数据帧
,我不知道您的源代码使用哪种方法。能否请您在问题的开头发布一段R或Python代码,以便我清楚您需要什么管道?添加Python代码示例,以说明如何消除重复列。
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     │