使用 Julia 扩展数据框中的字典字段列表

Using Julia to expand a list of dicts fields in dataframe

我在数据框中有一列是字典列表:

[{"key1": value1, "key2": "value2", "key3": "value3", "key4": "value4"}, {"key1": value1, "key2": "value2", "key3": "value3", "key4": "value4"}]

有没有办法扩展此列以获得如下内容:

key1    key2     key3      key4
value1  value2   value3    value4
value1  value2   value3    value4

注意:key_可以是任意字符串,value_可以是任意值。

这很简单:

julia> df = DataFrame(col=[Dict("key1"=>"value1", "key2"=>"value2", "key3"=>"value3", "key4"=>"value4"),
                           Dict("key1"=>"value1", "key2"=>"value2", "key3"=>"value3", "key4"=>"value4")])
2×1 DataFrame
 Row │ col
     │ Dict…
─────┼───────────────────────────────────
   1 │ Dict("key2"=>"value2", "key3"=>"…
   2 │ Dict("key2"=>"value2", "key3"=>"…

julia> select(df, :col => AsTable)
2×4 DataFrame
 Row │ key2    key3    key1    key4
     │ String  String  String  String
─────┼────────────────────────────────
   1 │ value2  value3  value1  value4
   2 │ value2  value3  value1  value4

唯一的限制是结果列的顺序未定义,因为 Dict 不保证键顺序。您需要在第二步中 re-order 它们,例如像这样:

julia> select(select(df, :col => AsTable), string.("key", 1:4))
2×4 DataFrame
 Row │ key1    key2    key3    key4
     │ String  String  String  String
─────┼────────────────────────────────
   1 │ value1  value2  value3  value4
   2 │ value1  value2  value3  value4

另一种方法是:

julia> select(df, :col .=> [ByRow(x -> x["key$i"]) => "key$i" for i in 1:4])
2×4 DataFrame
 Row │ key1    key2    key3    key4
     │ String  String  String  String
─────┼────────────────────────────────
   1 │ value1  value2  value3  value4
   2 │ value1  value2  value3  value4

它在概念上有点复杂,需要您知道要提取哪些键,但好处是您可以一次性完成操作。