我有一系列的字典,如下所示:
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)
我如何一次将其弹出到DataFrame中,而无需循环遍历每本词典并逐个键入关键字,这样我就具有一个如下所示的Dataframe:
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 │
答案 0 :(得分:1)
一种方法是
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)
即将每个Dict
转换为DataFrame
并将它们连接起来。
更详细的解释:
DataFrame(somedict)
是一个构造函数调用,它从DataFrame
创建一个Dict
DataFrame.(arrayofdicts)
:构造函数调用broadcasts处的点使得所有包含的Dict
都转换为DataFrame
s,并且我们得到{{ 1}} s。有关更多信息,请参见Julia文档中的Dot Syntax for Vectorizing Functions。
DataFrame
:我们现在将vcat(DataFrame.(arrayofdicts)...)
的数组splat放入DataFrame
函数中,该函数将它们垂直(行)连接。