我有一系列字典如下:
julia> data
2-element Array{Any,1}:
Dict{String,Any}("ratio1"=>1.36233,"time"=>"2014-06-19T15:47:40.000000Z","ratio2"=>1.36243)
Dict{String,Any}("ratio1"=>1.3623,"time"=>"2014-06-19T15:48:00.000000Z","ratio2"=>1.36245)
Run Code Online (Sandbox Code Playgroud)
我怎样才能把它一次性弹出到一个数据帧中,而不用一个一个地循环遍历每个字典和键,这样我就有一个如下所示的数据帧:
2×3 DataFrame
? Row ? ratio1 ? ratio2 ? time ?
? ? Float64 ? Float64 ? String ?
?????????????????????????????????????????????????????????
? 1 ? 1.36233 ? 1.36243 ? 2014-06-19T15:47:40.000000Z ?
? 2 ? 1.3623 ? 1.36245 ? 2014-06-19T15:48:00.000000Z ?
Run Code Online (Sandbox Code Playgroud)
一种方法是
julia> vcat(DataFrame.(data)...)
2×3 DataFrame
? Row ? ratio1 ? ratio2 ? time ?
? ? Float64 ? Float64 ? String ?
?????????????????????????????????????????????????????????
? 1 ? 1.36233 ? 1.36243 ? 2014-06-19T15:47:40.000000Z ?
? 2 ? 1.3623 ? 1.36245 ? 2014-06-19T15:48:00.000000Z ?
julia> @btime vcat(DataFrame.($data)...)
31.146 ?s (157 allocations: 12.19 KiB)
Run Code Online (Sandbox Code Playgroud)
Dict
即将每个转换为 aDataFrame
并将它们连接起来。
更详细的解释:
DataFrame(somedict)
是一个构造函数调用,它DataFrame
从一个Dict
DataFrame.(arrayofdicts)
:这里的点广播构造函数调用,这样所有包含的Dict
s 都转换为DataFrame
s,我们获得了一个DataFrame
s数组。有关更多信息,请参阅Julia 文档中的向量化函数的点语法。
vcat(DataFrame.(arrayofdicts)...)
:我们现在图示我们的阵列DataFrame
S插入vcat
功能,垂直(行)连接它们。