gpt4 book ai didi

julia - 如何在 Julia 中仅选择数据框列的子集

转载 作者:行者123 更新时间:2023-12-02 00:42:12 25 4
gpt4 key购买 nike

我有一个包含多个列的数据框,例如column1、column2...column100。如何仅选择列的子集,例如(不是 column1)应返回所有列 column2...column100。

data[[colnames(data) .!= "column1"]])

似乎不起作用。

我不想改变数据帧。我只想选择所有没有特定列名称的列,如我的示例

最佳答案

编辑 2021 年 2 月 7 日:由于人们似乎仍然在 Google 上找到此内容,我将编辑此内容,在顶部写下当前的 DataFrames (1.0+) 允许 Not() InvertedIndices.jl支持的选择以及作为列名称的字符串类型,包括使用 r"" 字符串宏进行正则表达式选择。示例:

julia> df = DataFrame(a1 = rand(2), a2 = rand(2), x1 = rand(2), x2 = rand(2), y = rand(["a", "b"], 2))
2×5 DataFrame
Row │ a1 a2 x1 x2 y
│ Float64 Float64 Float64 Float64 String
─────┼────────────────────────────────────────────────
1 │ 0.784704 0.963761 0.124937 0.37532 a
2 │ 0.814647 0.986194 0.236149 0.468216 a

julia> df[!, r"2"]
2×2 DataFrame
Row │ a2 x2
│ Float64 Float64
─────┼────────────────────
1 │ 0.963761 0.37532
2 │ 0.986194 0.468216

julia> df[!, Not(r"2")]
2×3 DataFrame
Row │ a1 x1 y
│ Float64 Float64 String
─────┼────────────────────────────
1 │ 0.784704 0.124937 a
2 │ 0.814647 0.236149 a

最后,names 函数有一个将类型作为第二个参数的方法,该方法可以方便地按每列的元素类型对 DataFrames 进行子集化:


julia> df[!, names(df, String)]
2×1 DataFrame
Row │ y
│ String
─────┼────────
1 │ a
2 │ a

除了使用方括号进行索引之外,还有 select 函数(及其变异等效 select!),它基本上采用与中的列索引相同的输入[]-索引作为第二个参数:

julia> select(df, Not(r"a"))
2×3 DataFrame
Row │ x1 x2 y
│ Float64 Float64 String
─────┼────────────────────────────
1 │ 0.124937 0.37532 a
2 │ 0.236149 0.468216 a

原答案如下

<小时/>

正如 @Reza Afzalan 所说,您想要执行的操作返回一个字符串数组,而 DataFrame 中的列名称是符号。

鉴于 Julia 没有条件列表理解,我想你能做的最好的事情就是

data[:, filter(x -> x != :column1, names(df))]

这将为您提供删除了第 1 列的数据集(不会改变它)。您也可以将其扩展到检查名称列表:

data[:, filter(x -> !(x in [:column1,:column2]), names(df))]

更新:正如 Ian 在下面所说,对于此用例,Not 语法现在是最好的方法。

更一般地说,条件列表理解现在也可用,所以你可以这样做:

data[:, [x for x in names(data) if x != :column1]]

关于julia - 如何在 Julia 中仅选择数据框列的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32558184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com