2016-10-01 36 views
2

我想創建一個DataFrame的索引子集並在其中使用一個變量。在這種情況下,我想將第一列的所有-9999值更改爲NA。如果我做的:df[df[:1] .== -9999, :1] = NA它像它應該。但如果我使用一個變量作爲索引它througs錯誤(LoadError:KeyError異常:關鍵:我沒有找到):Indexing Dataframe with variable in Julia

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

這就是解決方案!謝謝 ! – Manuel

+0

我想知道爲什麼你使用':1'作爲列索引名稱,爲什麼不只是使用數組? – Gnimuc

+1

接受答案,如果它解決了你的問題:) –

回答

5

:i實際上是一個符號朱莉婭:

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_ind)可以接受一個共同的索引:

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

既然你只是想改變第一(N)列,有Symbol("1")而且只要1作爲列名之間沒有區別有規則地排列爲:

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