使用 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
它在概念上有点复杂,需要您知道要提取哪些键,但好处是您可以一次性完成操作。
我在数据框中有一列是字典列表:
[{"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
它在概念上有点复杂,需要您知道要提取哪些键,但好处是您可以一次性完成操作。