Polars:Polars 中是否有像 json_normalize 一样的功能?

12

我翻阅了 Polars 的全部文档,但未找到可将嵌套的 JSON 转换为数据框的任何内容。

test = {
  "name": "Ravi",
  "Subjects": {
    "Maths": 92,
    "English": 94,
    "Hindi": 98
  }
}

在pandas中,json_normalize会将此转换为一个数据框,并将列命名为name、Subjects.Maths、Subjects.English和Subjects.Hindi。那么在Polars中是否也有这种可能性?我尝试了所有的函数,但它总是因为无法理解嵌套结构而抛出错误。


3
在 Polars 中没有像 Pandas 中的 json_normalize。你可能需要先使用另一个包来展开字典,比如 https://pypi.org/project/json-flatten/。 - jvz
据我所知,arrow2 crate 在处理嵌套结构方面表现不佳。 - Moriarty Snarly
2个回答

7

对于一个简单的类JSON字典,您可以使用列表推导式将值转换为值列表。

以下是一个示例:

grades = {
  "name": "Ravi",
  "Subjects": {
    "Maths": 92,
    "English": 94,
    "Hindi": 98
  }}

grades_with_list = {key:[value] for key, value in grades.items()}
pl.DataFrame(grades_with_list)

# Output
shape: (1, 2)
┌──────┬────────────┐
│ name ┆ Subjects   │
│ ---  ┆ ---        │
│ str  ┆ struct[3]  │
╞══════╪════════════╡
│ Ravi ┆ {92,94,98} │
└──────┴────────────┘

# You can also un-nest the Subjets column, to get a separate column for each subject.

pl.DataFrame(grades_with_list).unnest('Subjects')

# Output
shape: (1, 4)
┌──────┬───────┬─────────┬───────┐
│ name ┆ Maths ┆ English ┆ Hindi │
│ ---  ┆ ---   ┆ ---     ┆ ---   │
│ str  ┆ i64   ┆ i64     ┆ i64   │
╞══════╪═══════╪═════════╪═══════╡
│ Ravi ┆ 929498    │
└──────┴───────┴─────────┴───────┘


在此处查看更多 unnest 的示例 here,也可以在此处查看新的 json_extract here(而不是理解式)。 - ecoe

3

没有,据我所知,建议使用pandas函数,然后将pandas数据帧加载到polars中。


我认为楼主的主要目标是避免使用Pandas。也许数据量太大了无法使用它。 - Seb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接