Convert Julia array to dataframe

2020-03-25 05:05发布

I have an array X that I'd like to convert to a dataframe. Upon recommendation from the web, I tried converting to a dataframe and get the following error.

julia> y=convert(DataFrame,x) ERROR:converthas no method matching convert(::Type{DataFrame}, ::Array{Float64,2}) in convert at base.jl:13

When I try DataFrame(x), the conversion works but i get a complaint that the conversion is deprecated.

julia> DataFrame(x) WARNING: DataFrame(::Matrix, ::Vector)) is deprecated, use convert(DataFrame, Matrix) instead in DataFrame at /Users/Matthew/.julia/v0.3/DataFrames/src/deprecated.jl:54 (repeats 2 times)

Is there another method I should be aware of to keep my code consistent?

EDIT: Julia 0.3.2, DataFrames 0.5.10 OSX 10.9.5

julia> x=rand(4,4)
4x4 Array{Float64,2}:
 0.467882   0.466358  0.28144   0.0151388
 0.22354    0.358616  0.669564  0.828768
 0.475064   0.187992  0.584741  0.0543435
 0.0592643  0.345138  0.704496  0.844822

julia> convert(DataFrame,x)
ERROR: `convert` has no method matching convert(::Type{DataFrame}, ::Array{Float64,2}) in convert at base.jl:13

4条回答
一纸荒年 Trace。
2楼-- · 2020-03-25 05:56

I've been confounded by the same issue a number of times, and eventually realized the issue is often related to the format of the array, and is easily resolved by simply transposing the array prior to conversion.

In short, I recommend:

julia> convert(DataFrame, x')
查看更多
啃猪蹄的小仙女
3楼-- · 2020-03-25 06:01

This works for me:

julia> using DataFrames

julia> x = rand(4, 4)
4x4 Array{Float64,2}:
 0.790912  0.0367989  0.425089  0.670121
 0.243605  0.62487    0.582498  0.302063
 0.785159  0.0083891  0.881153  0.353925
 0.618127  0.827093   0.577815  0.488565

julia> convert(DataFrame, x)
4x4 DataFrame
| Row | x1       | x2        | x3       | x4       |
|-----|----------|-----------|----------|----------|
| 1   | 0.790912 | 0.0367989 | 0.425089 | 0.670121 |
| 2   | 0.243605 | 0.62487   | 0.582498 | 0.302063 |
| 3   | 0.785159 | 0.0083891 | 0.881153 | 0.353925 |
| 4   | 0.618127 | 0.827093  | 0.577815 | 0.488565 |

Are you trying something different?

If that doesn't work try posting a bit more code we can help you better.

查看更多
▲ chillily
4楼-- · 2020-03-25 06:02

So I found this online and honestly felt dumb.

using CSV
WhatIWant = DataFrame(WhatIHave)

this was adapted from an R guide, but it works so heck

查看更多
戒情不戒烟
5楼-- · 2020-03-25 06:03
# convert a Matrix{Any} with a header row of col name strings to a DataFrame
# e.g. mat2df(["a" "b" "c"; 1 2 3; 4 5 6])

mat2df(mat) = convert(DataFrame,Dict(mat[1,:],
                     [mat[2:end,i] for i in 1:size(mat,2)]))

# convert a Matrix{Any} (mat) and a list of col name strings (headerstrings) 
# to a DataFrame, e.g. matnms2df([1 2 3;4 5 6], ["a","b","c"])

matnms2df(mat, headerstrs) = convert(DataFrame,
    Dict(zip(headerstrs,[mat[:,i] for i in 1:size(mat,2)])))
查看更多
登录 后发表回答