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

str*_*bot 2 dataframe julia

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

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

我能够创建数据框.每个var1,var2对意欲具有相关联的时间序列.

我想在循环中生成数据,并希望使用附加到此数据框 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

Fen*_*ang 5

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

df = DataFrame(var1 = Int64[], var2 = Int64[], ts = Array{Int64, 1}[])
Run Code Online (Sandbox Code Playgroud)

请注意从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] ?
Run Code Online (Sandbox Code Playgroud)

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