我试图创建一个表,其中每一行都有与特定测试用例相关联的时间序列数据。
julia> df = DataFrame(var1 = Int64[], var2 = Int64[], ts = Array{Array{Int64, 1}, 1})
0x3 DataFrames.DataFrame
我能够创建数据框。每个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
和
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
最好的方法是什么?我的目标是否正确?
答案 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中。