在 Julia 中使用变量索引数据框

Indexing Dataframe with variable in Julia

我想创建一个 DataFrame 的索引子集并在其中使用一个变量。在这种情况下,我想将第一列的所有 -9999 值更改为 NA。如果我这样做:df[df[:1] .== -9999, :1] = NA 它会像它应该的那样工作..但是如果我使用一个变量作为索引器它会报错(LoadError: KeyError: key :i not found):

i = 1
df[df[:i] .== -9999, :i] = NA  

:i实际上是julia中的一个符号:

julia> typeof(:i)
Symbol

您可以像这样定义绑定到符号的变量:

julia> i = Symbol(2)
Symbol("2")

那么你可以简单地使用 df[df[i] .== 1, i] = 123:

julia> df
10×1 DataFrames.DataFrame
│ Row │ 2   │
├─────┼─────┤
│ 1   │ 123 │
│ 2   │ 2   │
│ 3   │ 3   │
│ 4   │ 4   │
│ 5   │ 5   │
│ 6   │ 6   │
│ 7   │ 7   │
│ 8   │ 8   │
│ 9   │ 9   │
│ 10  │ 10  │

值得注意的是,在您的示例中 df[df[:1] .== -9999, :1]:1NOT 一个符号:

julia> :1
1

事实上,表达式等于df[df[1] .== -9999, 1],它的工作原理是有一个相应的getindex方法,其参数(col_ind)可以接受一个公共索引:

julia> @which df[df[1].==1, 1]
getindex{T<:Real}(df::DataFrames.DataFrame, row_inds::AbstractArray{T,1}, col_ind::Union{Real,Symbol})

因为你只是想改变first (n)列,所以Symbol("1")1之间没有区别,只要你的列名规律排列为:

│ Row │ 1   │ 2   │ 3   │...
├─────┼─────┤─────┼─────┤
│ 1   │     │     │     │...