2016-04-19 25 views
2

我想創建一個表,其中每行都有與特定測試用例關聯的時間序列數據。Julia dataframe其中一列是數組數組?

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 

什麼是最好的方式去這個數據幀對這個?我的預期方法是否正確?

回答

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

+1

感謝您的解釋,鳳陽。這看起來很明顯,現在我明白了:)另外,謝謝你澄清','行爲。如果我理解正確,'(1,2,[3,4,5])'用這些值創建一個元組文字。 '[1,2,[3,4,5]]'的* intent *是創建一個數組,其中'x [1] = 1,x [2] = 2,x [3] = [3, 4,5]',但不是由於','的連接行爲。 – strobot