首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia Dataframes中的重复列

问Julia Dataframes中的重复列
EN

Stack Overflow用户
提问于 2020-08-24 16:18:16
回答 1查看 598关注 0票数 3

在Python和R中,可以很容易地摆脱重复的列--只需加载数据,分配列名,并选择不重复的列。

使用处理这些数据的最佳实践是什么?此处不允许分配重复的列名。我知道唯一的方法是多按摩输入的数据,并在构造数据前去掉这些数据?

问题是,处理已经构造的dataframe中的重复列几乎总是更容易,而不是在传入数据中。

UPD: --我指的是重复的列名。我从原始数据构建数据,在原始数据中可以重复列名(因此也是数据)。

UPD2:添加了 Python示例。

代码语言:javascript
复制
>>> 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矩阵构建我的,然后从一个向量指定列名。这就是我需要去除具有重复名称的列(在dataframe中已经存在)的地方。这就是底层数据的本质,有时它有欺骗,有时没有,我无法控制它的创建。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-24 16:38:22

这是你要找的东西吗(从你的描述中我没有百分之百确定-如果这不是你想要的,那么请用一个例子更新这个问题):

代码语言:javascript
复制
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关键字参数:

代码语言:javascript
复制
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

因此,在创建数据框架时,您似乎可以访问列名。在这种情况下,我会:

代码语言:javascript
复制
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     │
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63564871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档