2015-02-23 21 views
2

當我運行模擬時,我喜歡初始化一個大的空數組,並在模擬迭代到最後時填充它。我用res = Array(Real,(n_iterations,n_parameters))之類的東西來做這件事。不過,有命名的列是我的好選擇,我認爲這意味着使用DataFrame。但是,當我嘗試執行類似res_df = convert(DataFrame,res)的操作時,它會引發錯誤。我想不是做這樣的事情res_df = DataFrame(a=Array(Real,N),b=Array(Real,N),c=Array(Real,N),....)的建議通過回答一個更簡潔的方法:julia create an empty dataframe and append rows to it在Julia中預分配已知大小的數據幀

回答

4

可以使用DataFrame(column_eltypes::Array{T,1},cnames::Array{T,1},nrows::Integer)構造:

julia> DataFrame([Real,Real,Real],[:a,:b,:c], 10000) 
10000x3 DataFrame 
| Row | a | b | c | 
|-------|----|----|----| 
| 1  | NA | NA | NA | 
| 2  | NA | NA | NA | 
⋮ 
| 9998 | NA | NA | NA | 
| 9999 | NA | NA | NA | 
| 10000 | NA | NA | NA | 

這麼說,我高度建議您使用數組的具體類型而不是Real;例如,DataFrame([Float64, Float64, …。這樣做會帶來巨大的性能提升。

+0

如果您知道所有列的類型都是相同的,並且永遠不會有未填充('NA')元素,那麼可能會有其他數據結構可供您使用。看一下[NamedArrays.jl](https://github.com/davidavdav/NamedArrays.jl),或者如果你願意乘坐你的褲子坐在不穩定的0.4上工作,你可以試試我的最近的進行中的工作[AxisArrays.jl](https://github.com/mbauman/AxisArrays.jl)。這兩個項目都旨在更直接地增加具有維度名稱和軸元數據的內置'Array',而DataFrames使用列集合方法。 – 2015-02-23 20:01:46

+0

謝謝你,還有關於Float64與Real的提示。 – 2015-02-27 02:35:32

相關問題