当我运行模拟时,我喜欢初始化一个大的空数组,并在模拟迭代结束时将其填满。我用类似 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
最佳答案
要预分配数据框,您必须预分配其列。您可以创建三列全是 missing
只需执行 [fill(missing, 10000) for _ in 1:3]
即可获得值,但这实际上根本没有分配任何东西,因为这些向量只能保存一个值 — missing
— 因此以后不能更改它们以保存其他值。一种方法是使用 to Vector
可以容纳 Missing
的构造函数或 Float64
:
julia> DataFrame([Vector{Union{Missing, Float64}}(missing, 10000) for _ in 1:3], [:a, :b, :c])
10000×3 DataFrame
Row │ a b c
│ Float64? Float64? Float64?
───────┼──────────────────────────────
1 │ missing missing missing
2 │ missing missing missing
⋮ │ ⋮ ⋮ ⋮
10000 │ missing missing missing
9997 rows omitted
请注意,而不是 Real
,这是使用混凝土Float64
- 这将有明显更好的性能。(此答案已被编辑以反射(reflect) DataFrames v1.0 语法)
关于julia - 在 Julia 中预分配已知大小的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666466/