让我展示几个选项,这些选项还将展示 DataFrames.jl 与 Tables.jl 的集成以及在这种情况下如何使用它。
你可以做例如这个:
julia> df = DataFrame(x=Float64[], y=Float64[])
0×2 DataFrame
julia> foreach(x -> push!(df, x), Iterators.product(0:0.25:1, 0:0.25:1))
julia> df
25×2 DataFrame
Row │ x y
│ Float64 Float64
─────┼──────────────────
1 │ 0.0 0.0
2 │ 0.25 0.0
3 │ 0.5 0.0
⋮ │ ⋮ ⋮
23 │ 0.5 1.0
24 │ 0.75 1.0
25 │ 1.0 1.0
19 rows omitted
或者这个(这会更快,但前一种模式在您动态生成数据框行的一般情况下很有用):
julia> rename!(DataFrame(Iterators.product(0:0.25:1, 0:0.25:1)), [:x, :y])
25×2 DataFrame
Row │ x y
│ Float64 Float64
─────┼──────────────────
1 │ 0.0 0.0
2 │ 0.25 0.0
3 │ 0.5 0.0
⋮ │ ⋮ ⋮
23 │ 0.5 1.0
24 │ 0.75 1.0
25 │ 1.0 1.0
19 rows omitted
DataFrame(Iterators.product(0:0.25:1, 0:0.25:1)) 的问题在于默认列名是 "1" 和 "2",您可能想要更改它们。
因此,您也可以像这样生成NamedTuples 而不是Tuples:
julia> DataFrame((x=x,y=y) for x in 0:0.25:1 for y in 0:0.25:1)
25×2 DataFrame
Row │ x y
│ Float64 Float64
─────┼──────────────────
1 │ 0.0 0.0
2 │ 0.0 0.25
3 │ 0.0 0.5
⋮ │ ⋮ ⋮
23 │ 1.0 0.5
24 │ 1.0 0.75
25 │ 1.0 1.0
19 rows omitted
具有不同的行顺序。