Julia数据帧,其中列是数组数组?

时间:2016-04-19 21:33:40

标签: dataframe julia

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

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

最好的方法是什么?我的目标是否正确?

1 个答案:

答案 0 :(得分:5)

你不小心把矢量的类型放在了实际的矢量中。该声明将起作用:

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中。