将数据帧转换为元组向量的便捷方法?

c00*_*kie 3 tuples dataframe julia

我正在尝试创建一个函数,将数据帧转换为 Julia 中的元组向量。

\n

例如,

\n
using 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)\n
Run Code Online (Sandbox Code Playgroud)\n

然后T就变成了我想要的结果。

\n

然而,问题是我需要使上述过程发挥作用。

\n

所以,我需要的是自动将数据帧的列放入 zip 函数中。

\n

我想要制作的函数形式如下

\n
using 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\n
Run Code Online (Sandbox Code Playgroud)\n

有什么方便的方法吗?多谢

\n

Prz*_*fel 8

这也许是最短的方法:

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)


Bog*_*ski 5

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))