【问题标题】:Julia dataframe where a column is an array of arrays?Julia数据框,其中一列是数组数组?
【发布时间】:2016-08-12 07:27:32
【问题描述】:

我正在尝试创建一个表,其中每一行都有与特定测试用例关联的时间序列数据。

julia> df = DataFrame(var1 = Int64[], var2 = Int64[], ts = Array{Array{Int64, 1}, 1})
0x3 DataFrames.DataFrame

我能够创建数据框。每个var1var2 对都有一个关联的时间序列。

我想循环生成数据并想使用push!追加到这个数据帧

我试过了

julia> push!(df, [1, 2, [3,4,5]])
ERROR: ArgumentError: Length of iterable does not match DataFrame column count.
  in push! at /Users/stro/.julia/v0.4/DataFrames/src/dataframe/dataframe.jl:871

julia> push!(df, (1, 2, [3,4,5]))
ERROR: ArgumentError: Error adding [3,4,5] to column :ts. Possible type mis-match.
 in push! at /Users/stro/.julia/v0.4/DataFrames/src/dataframe/dataframe.jl:883

解决这个问题的最佳方法是什么?我的预期方法是否正确?

【问题讨论】:

    标签: dataframe julia


    【解决方案1】:

    您不小心放入了向量的类型,而不是实际的向量。此声明将起作用:

    df = DataFrame(var1 = Int64[], var2 = Int64[], ts = Array{Int64, 1}[])
    

    注意从Array{Array{Int64, 1}, 1}(一种类型)到Array{Int64, 1}[](具有该类型的实际向量)的变化。

    然后一切正常:

    julia> push!(df, (1, 2, [3,4,5]))
    
    julia> df
    1x3 DataFrames.DataFrame
    │ Row │ var1 │ var2 │ ts      │
    ┝━━━━━┿━━━━━━┿━━━━━━┿━━━━━━━━━┥
    │ 1   │ 1    │ 2    │ [3,4,5] │
    

    请注意,您的另一个示例使用 [1, 2, [3,4,5]] 仍然不起作用。这是因为 Julia 数组语法中的一个怪癖意味着逗号 , 运算符进行连接,所以实际上 [1, 2, [3,4,5]] 表示 [1, 2, 3, 4, 5]。这种行为很奇怪,将在 Julia 0.5 中修复,但为了向后兼容而保留在 0.4 中。

    【讨论】:

    • 感谢凤阳的解释。现在我看到了,这似乎很明显:) 另外,感谢您澄清, 的行为。如果我理解正确,(1, 2, [3,4,5]) 会使用这些值创建一个元组文字。 [1, 2, [3,4,5]]intent 是用x[1] = 1, x[2] = 2, x[3] = [3,4,5] 创建一个数组,但不是因为, 的串联行为。
    猜你喜欢
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多