Julia 中 pandas 的转置等价物是什么

sie*_*ein 3 pandas julia

什么是pandas“转置等价” Julia?谢谢

我喜欢转置数据框,但transpose功能不起作用。

小智 5

是的permutedims,它将数据框翻转过来,使得行变成列,列中的值变成名称。

  • `transpose` 不起作用的原因是它是递归的。在 Julia 中,“permutedims”不是递归的,这是用户通常期望的行为。 (2认同)

Bog*_*ski 5

transpose请注意 Julia Base 中和之间的区别permutedimspermutedims只影响最外面的容器。transpose是递归的。

\n

以下是后果:

\n
julia> x = [randstring(3) for _ in 1:3, _ in 1:3]\n3\xc3\x973 Matrix{String}:\n "nTa"  "QBM"  "3dJ"\n "RsL"  "mD1"  "3jq"\n "dFp"  "bfB"  "k6P"\n\njulia> permutedims(x)\n3\xc3\x973 Matrix{String}:\n "nTa"  "RsL"  "dFp"\n "QBM"  "mD1"  "bfB"\n "3dJ"  "3jq"  "k6P"\n\njulia> transpose(x)\n3\xc3\x973 transpose(::Matrix{String}) with eltype Union{}:\nError showing value of type LinearAlgebra.Transpose{Union{}, Matrix{String}}:\nERROR: MethodError: no method matching transpose(::String)\n\njulia> y = [rand(3) for _ in 1:3, _ in 1:3]\n3\xc3\x973 Matrix{Vector{Float64}}:\n [0.446435, 0.653228, 0.0857836]  [0.378189, 0.505487, 0.0504642]  [0.0570918, 0.462984, 0.800813]\n [0.801857, 0.75505, 0.714087]    [0.253316, 0.458364, 0.80242]    [0.93742, 0.699745, 0.140957]\n [0.419783, 0.22946, 0.748267]    [0.445365, 0.563222, 0.363561]   [0.088825, 0.0869342, 0.311187]\n\njulia> permutedims(y)\n3\xc3\x973 Matrix{Vector{Float64}}:\n [0.446435, 0.653228, 0.0857836]  [0.801857, 0.75505, 0.714087]  [0.419783, 0.22946, 0.748267]\n [0.378189, 0.505487, 0.0504642]  [0.253316, 0.458364, 0.80242]  [0.445365, 0.563222, 0.363561]\n [0.0570918, 0.462984, 0.800813]  [0.93742, 0.699745, 0.140957]  [0.088825, 0.0869342, 0.311187]\n\njulia> transpose(y) # note that inside we have 1x3 objects not vectors\n3\xc3\x973 transpose(::Matrix{Vector{Float64}}) with eltype LinearAlgebra.Transpose{Float64, Vector{Float64}}:\n [0.446435 0.653228 0.0857836]  [0.801857 0.75505 0.714087]  [0.419783 0.22946 0.748267]\n [0.378189 0.505487 0.0504642]  [0.253316 0.458364 0.80242]  [0.445365 0.563222 0.363561]\n [0.0570918 0.462984 0.800813]  [0.93742 0.699745 0.140957]  [0.088825 0.0869342 0.311187]\n
Run Code Online (Sandbox Code Playgroud)\n

在 DataFrames.jl 中,我们认为这种递归行为(这在线性代数上下文中有意义)是不可取的。您甚至可以在文档字符串中阅读以下内容transpose

\n
\n

此操作旨在用于线性代数使用 - 对于一般数据操作,请参阅排列,它是非递归的。

\n
\n

此外,在 DataFrames.jl 中,permutedims要求您指定在操作后将成为列名称的列(此要求是 DataFrames.jl 特定的),并且在执行提升时需要小心eltype(对于具有共同点的矩阵,此问题不可见)所有元素的 eltype,而在数据框中每列可能有不同的 eltype):

\n
julia> df1 = DataFrame(rowkey=["x", "y"], b=[1.0, 2.0], c=[3, 4], d=[true, false])\n2\xc3\x974 DataFrame\n Row \xe2\x94\x82 rowkey  b        c      d\n     \xe2\x94\x82 String  Float64  Int64  Bool\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\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 x           1.0      3   true\n   2 \xe2\x94\x82 y           2.0      4  false\n\njulia> df2 = permutedims(df1, :rowkey)\n3\xc3\x973 DataFrame\n Row \xe2\x94\x82 rowkey  x        y\n     \xe2\x94\x82 String  Float64  Float64\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\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 b           1.0      2.0\n   2 \xe2\x94\x82 c           3.0      4.0\n   3 \xe2\x94\x82 d           1.0      0.0\n\njulia> permutedims(df2, :rowkey)\n2\xc3\x974 DataFrame\n Row \xe2\x94\x82 rowkey  b        c        d\n     \xe2\x94\x82 String  Float64  Float64  Float64\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\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 x           1.0      3.0      1.0\n   2 \xe2\x94\x82 y           2.0      4.0      0.0\n
Run Code Online (Sandbox Code Playgroud)\n