了解julia DataFrames.select()中冒号的行为
我有一些数据有许多行,我想重新排序,在某些情况下重命名。由于列的数量太多,我不想选择了解julia DataFrames.select()中冒号的行为,dataframe,julia,Dataframe,Julia,我有一些数据有许多行,我想重新排序,在某些情况下重命名。由于列的数量太多,我不想选择并重命名其中的每一列。但是当我使用:操作符来选择其余的列时,我得到了一个我没有预料到的结果。我重命名的列包含两次: julia> data = [2 1 3 50 52 51 53 100] julia> names = ["col 2","col 1", "col_3", "col_50&qu
并重命名其中的每一列。但是当我使用:
操作符来选择其余的列时,我得到了一个我没有预料到的结果。我重命名的列包含两次:
julia> data = [2 1 3 50
52 51 53 100]
julia> names = ["col 2","col 1", "col_3", "col_50"]
julia> df = DataFrame(data, names)
2×4 DataFrame
Row │ col 2 col 1 col_3 col_50
│ Int64 Int64 Int64 Int64
─────┼─────────────────────────────
1 │ 2 1 3 50
2 │ 52 51 53 100
julia> select(df, "col 1" => :col_1, "col 2" => :col_2, :)
2×6 DataFrame
Row │ col_1 col_2 col 1 col 2 col_3 col_50
│ Int64 Int64 Int64 Int64 Int64 Int64
─────┼───────────────────────────────────────────
1 │ 1 2 1 2 3 50
2 │ 51 52 51 52 53 100
我希望/期待着这个
julia> select(df, "col 1" => :col_1, "col 2" => :col_2, :)
2×6 DataFrame
Row │ col_1 col_2 col_3 col_50
│ Int64 Int64 Int64 Int64
─────┼────────────────────────────
1 │ 1 2 3 50
2 │ 51 52 53 100
关于:
操作符,我误解了什么。
有没有其他方法可以实现我想要的转变?事实证明是有的。有趣的是,人们(我在这里回答我自己的问题)可以专注于使用一个函数,而我可以使用重命名!()
然后使用选择对其重新排序!()
:
或使用管道:
julia> using Pipe
julia> @pipe df |>
rename!(_, "col 1" => :col_1, "col 2" => :col_2) |>
select!(_, :col_1, :col_2, :)
2×4 DataFrame
│ Row │ col_1 │ col_2 │ col_3 │ col_50 │
│ │ Int64 │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┼────────┤
│ 1 │ 1 │ 2 │ 3 │ 50 │
│ 2 │ 51 │ 52 │ 53 │ 100 │
关于:
操作员的行为,我必须感谢bkamins在
在以下位置添加:放置源数据框中尚未添加到结果的所有列;添加基于列名(而不是内容)
为什么它是这样工作的:
通常,我们允许在select等中进行可能非常复杂的转换-可以按任何顺序创建、重命名和添加列。为了保持规则的简单性(以便用户可以建立正确的心理模型来了解正在发生的事情,而不会发生太多的神奇事情),这种方法是从左到右处理列,并通过在目标数据框中的名称来识别列
<>我同意,在你的特定情况下,最好按照你的建议去做,但是如果你考虑一个更广泛的上下文(即在一个选择中你可以有几十个不同的转换组合),保持规则一致而没有任何特殊的情况,我相信更好。
我想我也在这里分享它。作为一个小评论rename
和rename代码>只更改列的名称-它们不更改顺序。啊,对不起。。。我纠正了它。
julia> using Pipe
julia> @pipe df |>
rename!(_, "col 1" => :col_1, "col 2" => :col_2) |>
select!(_, :col_1, :col_2, :)
2×4 DataFrame
│ Row │ col_1 │ col_2 │ col_3 │ col_50 │
│ │ Int64 │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┼────────┤
│ 1 │ 1 │ 2 │ 3 │ 50 │
│ 2 │ 51 │ 52 │ 53 │ 100 │