我正在尝试创建一个表,其中每一行都有与特定测试用例相关的时间序列数据.
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)
最好的方法是什么?我的目标是否正确?
你不小心把矢量的类型放在了实际的矢量中.该声明将起作用:
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中.