使用Julia扩展DATAFRAME中的DICS字段列表

发布于 2025-01-25 20:41:41 字数 408 浏览 2 评论 0原文

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

[{"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

注意:键_可以是任何字符串,value _可以是任何值。

I have a column in a dataframe that is a list of dictionaries:

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

Is there a way to expand this column to get something like this:

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

Note: key_ can be any string, value_ can be any value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十级心震 2025-02-01 20:41:41

这很容易:

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不能保证关键顺序,因此所产生的列的顺序未定义。您需要在第二步中重新订购它们,例如:

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

从概念上讲,它有点复杂,需要您知道要提取的键,但是好处是您在操作中进行操作一枪。

This is quite easy:

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

The only limitation is that the order of resulting columns is undefined as Dict does not guarantee key order. You would need to re-order them in the second step e.g. like this:

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

Another approach would be:

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

it is a bit more complex conceptually and requires you to know what keys you want to extract, but the benefit is that you do the operation in one shot.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文