【问题标题】:Indexing Dataframe with variable in Julia在 Julia 中使用变量索引数据框
【发布时间】:2016-10-01 09:21:06
【问题描述】:

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

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

【问题讨论】:

  • 这就是解决方案!谢谢!
  • 我想知道您为什么使用:1 作为列索引名称,为什么不直接使用数组?
  • 如果它解决了您的问题,请接受答案:)

标签: indexing dataframe julia keyerror


【解决方案1】:

: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_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   │     │     │     │...

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2016-10-20
    • 2015-05-23
    • 2019-09-29
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多