在 Julia DataFrame 上进行多列选择

4

假设我有以下DataFrame:

10 行,26列,名称为 A 到 Z

我想通过列名(而不是索引)创建多个子集。例如,假设我想要将列A到D和P到Z组成一个名为df2的新数据帧。

我尝试了这样的操作,但好像不起作用:

df2=df[:,[:A,:D ; :P,:Z]]

语法错误:数组表达式中意外的分号,在Slicing.jl的顶层范围:1。 是否有解决方法? 谢谢任何帮助。
2个回答

5
df2 = select(df, Between(:A,:D), Between(:P,:Z))

或者
df2 = df[:, All(Between(:A,:D), Between(:P,:Z))]

如果您确定列仅来自:A:Z,您也可以编写:

df2 = select(df, Not(Between(:E, :O)))

或者
df2 = df[:, Not(Between(:E, :O))]

最后,您可以使用columnindex函数轻松找到列的索引,例如:

columnindex(df, :A)

后续可以使用列编号 - 如果这是您更喜欢的内容。


1
完美!非常感谢。 - Bebio

3
在 Julia 中,您还可以使用 Char 来构建 Range,因此当您的列仅由单个字母命名时,另一个选项是:
df[:, Symbol.(vcat('A':'D', 'P':'Z'))]

1
你也可以使用['A':'D'; 'P':'Z'],这几乎与原始问题中的语法完全相同。 - Bogumił Kamiński
原问题中的语法无效(正如作者在问题中所述)。它应该是 d[:, Symbol.(['A':'D'; 'E':'F'])](分号代替 vcat)。d[:, ['A':'D'; 'E':'F']] 抛出 ERROR: ArgumentError: idxs[1] has type Char; only Integer, Symbol, or string values allowed when indexing by vector - Przemyslaw Szufel
1
这是我所指的内容。 - Bogumił Kamiński

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接