c00*_*kie 3 tuples dataframe julia
我正在尝试创建一个函数,将数据帧转换为 Julia 中的元组向量。
\n例如,
\nusing DataFrames\ndf = DataFrame(A=1:4, B=4:7, C=10:13)\n\n4\xc3\x973 DataFrame\n Row \xe2\x94\x82 A B C \n \xe2\x94\x82 Int64 Int64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 4 10\n 2 \xe2\x94\x82 2 5 11\n 3 \xe2\x94\x82 3 6 12\n 4 \xe2\x94\x82 4 7 13\n\nT = [t for t in zip(df.A, df.B, df.C)]\n\nT = 4-element Vector{Tuple{Int64, Int64, Int64}}:\n (1, 4, 10)\n (2, 5, 11)\n (3, 6, 12)\n (4, 7, 13)\nRun Code Online (Sandbox Code Playgroud)\n然后T就变成了我想要的结果。
\n然而,问题是我需要使上述过程发挥作用。
\n所以,我需要的是自动将数据帧的列放入 zip 函数中。
\n我想要制作的函数形式如下
\nusing DataFrames\n\nfunction DataframeToTuple(df)\n T = [t for t in zip(df.first column name, df.second column name, ... df.last column name)]\n return T\nend\n\nRun Code Online (Sandbox Code Playgroud)\n有什么方便的方法吗?多谢
\n这也许是最短的方法:
julia> Tuple.(eachrow(df))
4-element Vector{Tuple{Int64, Int64, Int64}}:
(1, 4, 10)
(2, 5, 11)
(3, 6, 12)
(4, 7, 13)
Run Code Online (Sandbox Code Playgroud)
知道可以用相同的方式将 a 转换DataFrame为 a Vectorof s 也很有趣:NamedTuple
julia> NamedTuple.(eachrow(df))
4-element Vector{NamedTuple{(:A, :B, :C), Tuple{Int64, Int64, Int64}}}:
(A = 1, B = 4, C = 10)
(A = 2, B = 5, C = 11)
(A = 3, B = 6, C = 12)
(A = 4, B = 7, C = 13)
Run Code Online (Sandbox Code Playgroud)
NamedTuple如果数据帧不是很宽(大约小于 1000 列),将数据帧转换为向量的更有效方法是:
julia> Tables.rowtable(df)
4-element Vector{NamedTuple{(:A, :B, :C), Tuple{Int64, Int64, Int64}}}:
(A = 1, B = 4, C = 10)
(A = 2, B = 5, C = 11)
(A = 3, B = 6, C = 12)
(A = 4, B = 7, C = 13)
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用元组,那么就这样做Tuple.(Tables.rowtable(df))。