在 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]
,:1
是 NOT 一个符号:
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 │ │ │ │...
我想创建一个 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]
,:1
是 NOT 一个符号:
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 │ │ │ │...