Indexing 在Julia中使用变量索引数据帧

Indexing 在Julia中使用变量索引数据帧,indexing,dataframe,julia,keyerror,Indexing,Dataframe,Julia,Keyerror,我想创建一个索引的子集,并在其中使用一个变量。在本例中,我希望将第一列的所有-9999值都更改为NA。如果我这样做:df[df[:1]。=-9999,:1]=NA它的工作原理应该是这样的。。但是,如果我使用变量作为索引器,则会出现错误(LoadError:KeyError:key:i not found): :i实际上是julia中的一个符号: julia> typeof(:i) Symbol 可以定义与符号的变量绑定,如下所示: julia> i = Symbol(2) Symb

我想创建一个索引的子集,并在其中使用一个变量。在本例中,我希望将第一列的所有-9999值都更改为NA。如果我这样做:
df[df[:1]。=-9999,:1]=NA
它的工作原理应该是这样的。。但是,如果我使用变量作为索引器,则会出现错误(LoadError:KeyError:key:i not found):


: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
不是一个符号:

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

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

这就是解决办法!非常感谢。我想知道为什么您使用
:1
作为列索引名,为什么不使用数组?如果解决了您的问题,请接受答案:)
julia> @which df[df[1].==1, 1]
getindex{T<:Real}(df::DataFrames.DataFrame, row_inds::AbstractArray{T,1}, col_ind::Union{Real,Symbol})
│ Row │ 1   │ 2   │ 3   │...
├─────┼─────┤─────┼─────┤
│ 1   │     │     │     │...