julia> using DataFrames
julia> using Tables
julia> df = DataFrame(a=rand(3), b=rand(3))
3×2 DataFrame
Row │ a b
│ Float64 Float64
─────┼─────────────────────
1 │ 0.266649 0.430507
2 │ 0.0831088 0.612815
3 │ 0.181096 0.658077
julia> Tables.columntable(df)
(a = [0.2666485657643721, 0.08310884238994776, 0.18109579692899447], b = [0.4305065586341045, 0.6128151086401142, 0.6580774728835025])
julia> Tables.rowtable(df)
3-element Vector{NamedTuple{(:a, :b), Tuple{Float64, Float64}}}:
(a = 0.2666485657643721, b = 0.4305065586341045)
(a = 0.08310884238994776, b = 0.6128151086401142)
(a = 0.18109579692899447, b = 0.6580774728835025)
Not necessarily the most efficient, but super clean.