转换Julia DataFrame

时间:2016-06-06 23:27:11

标签: dataframe julia

让我们创建Julia DataFrame

df=convert(DataFrame, rand(10, 4))

看起来像这样。我试图采取这个dataFrame的转置。 "转"函数似乎不适用于Julia Data Frame,如下所示。

enter image description here

我过去曾广泛使用过Python Pandas数据帧包。在Python中,它就像" df.T"请让我知道一种方法来传递这个数据帧。

2 个答案:

答案 0 :(得分:5)

我有同样的问题,并尝试了评论中建议的策略。但是,我遇到的问题是,如果您的DataFrame具有Matrix值,则转换为NA不会有效。您必须将其更改为其他内容,然后转换为Matrix。当我想从NA返回到Matrix类型时,我在转换回DataFrame时遇到了很多问题。

以下是使用DataFrame stackunstack函数执行此操作的方法。

df = DataFrame(A = 1:4, B = 5:8)
df[:id] = 1:size(df, 1)

4×3 DataFrames.DataFrame
│ Row │ A │ B │ id │
├─────┼───┼───┼────┤
│ 1   │ 1 │ 5 │ 1  │
│ 2   │ 2 │ 6 │ 2  │
│ 3   │ 3 │ 7 │ 3  │
│ 4   │ 4 │ 8 │ 4  │

:id文档建议添加DataFrame列,以帮助解除堆栈。

现在堆叠要转置的列:

dfl = stack(df, [:A, :B])

8×3 DataFrames.DataFrame
│ Row │ variable │ value │ id │
├─────┼──────────┼───────┼────┤
│ 1   │ A        │ 1     │ 1  │
│ 2   │ A        │ 2     │ 2  │
│ 3   │ A        │ 3     │ 3  │
│ 4   │ A        │ 4     │ 4  │
│ 5   │ B        │ 5     │ 1  │
│ 6   │ B        │ 6     │ 2  │
│ 7   │ B        │ 7     │ 3  │
│ 8   │ B        │ 8     │ 4  │

然后取消堆叠,切换id和变量名称(这就是为什么需要添加:id列)。

dfnew = unstack(dfl, :variable, :id, :value)
2×5 DataFrames.DataFrame
│ Row │ variable │ 1 │ 2 │ 3 │ 4 │
├─────┼──────────┼───┼───┼───┼───┤
│ 1   │ A        │ 1 │ 2 │ 3 │ 4 │
│ 2   │ B        │ 5 │ 6 │ 7 │ 8 │

答案 1 :(得分:0)

斯蒂芬回答的问题是,列的顺序未保留(如果您不满意以下DataFrame

,请尝试
julia> df = DataFrame(A = 1:4, B = 5:8, AA = 15:18)
4×3 DataFrame
│ Row │ A     │ B     │ AA    │
│     │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┤
│ 1   │ 1     │ 5     │ 15    │
│ 2   │ 2     │ 6     │ 16    │
│ 3   │ 3     │ 7     │ 17    │
│ 4   │ 4     │ 8     │ 18    │

但是此DataFrame可以使用以下方法进行转置(保持列/行的顺序):

julia> DataFrame([[names(df)]; collect.(eachrow(df))], [:column; Symbol.(axes(df, 1))])
3×5 DataFrame
│ Row │ column │ 1     │ 2     │ 3     │ 4     │
│     │ Symbol │ Int64 │ Int64 │ Int64 │ Int64 │
├─────┼────────┼───────┼───────┼───────┼───────┤
│ 1   │ A      │ 1     │ 2     │ 3     │ 4     │
│ 2   │ B      │ 5     │ 6     │ 7     │ 8     │
│ 3   │ AA     │ 15    │ 16    │ 17    │ 18    │

参考:https://github.com/JuliaData/DataFrames.jl/issues/2065#issuecomment-568937464