使用Julia中的变量索引Dataframe

Man*_*uel 2 indexing dataframe julia keyerror

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

i = 1
df[df[:i] .== -9999, :i] = NA  
Run Code Online (Sandbox Code Playgroud)

Gni*_*muc 5

:i 实际上是朱莉娅的象征:

julia> typeof(:i)
Symbol
Run Code Online (Sandbox Code Playgroud)

你可以定义一个绑定到符号的变量,如下所示:

julia> i = Symbol(2)
Symbol("2")
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地使用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  ?
Run Code Online (Sandbox Code Playgroud)

值得一提的是,在你的榜样df[df[:1] .== -9999, :1],:1不是一个符号:

julia> :1
1
Run Code Online (Sandbox Code Playgroud)

事实上,表达式等于df[df[1] .== -9999, 1]其中有一个相应的getindex方法,其argument(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})
Run Code Online (Sandbox Code Playgroud)

既然你只是想改变的第一(N)列,有没有什么区别Symbol("1"),并1只要你的列名有规律地排列为:

? Row ? 1   ? 2   ? 3   ?...
?????????????????????????
? 1   ?     ?     ?     ?...
Run Code Online (Sandbox Code Playgroud)