Indexing 在Julia中使用变量索引数据帧
我想创建一个索引的子集,并在其中使用一个变量。在本例中,我希望将第一列的所有-9999值都更改为NA。如果我这样做: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
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 │ │ │ │...