假设我有以下DataFrame:
10 行,26列,名称为 A 到 Z
我想通过列名(而不是索引)创建多个子集。例如,假设我想要将列A到D和P到Z组成一个名为df2的新数据帧。
我尝试了这样的操作,但好像不起作用:
df2=df[:,[:A,:D ; :P,:Z]]
语法错误:数组表达式中意外的分号,在Slicing.jl的顶层范围:1。 是否有解决方法? 谢谢任何帮助。
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)
后续可以使用列编号 - 如果这是您更喜欢的内容。
Char
来构建 Range
,因此当您的列仅由单个字母命名时,另一个选项是:df[:, Symbol.(vcat('A':'D', 'P':'Z'))]
['A':'D'; 'P':'Z']
,这几乎与原始问题中的语法完全相同。 - Bogumił Kamińskid[:, 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