python Polars:Polars中是否有类似json_normalize的功能?

vu8f3i0k  于 5个月前  发布在  Python
关注(0)|答案(3)|浏览(71)

我浏览了Polars的整个文档,但找不到任何可以将嵌套的json转换为嵌套框架的东西。

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

字符串
pandas中的json_normalize会通过将列命名为name,Subjects.Maths,Subjects.English和Subjects.Hindi来将其转换为一个嵌套结构。那么这在Polars中也有可能吗?我确实尝试了所有的函数,但它总是抛出错误,因为它不理解嵌套结构。

u91tlkcl

u91tlkcl1#

对于一个简单的类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 ┆ 92    ┆ 94      ┆ 98    │
└──────┴───────┴─────────┴───────┘

字符串

oipij1gg

oipij1gg2#

没有,AFAIK建议使用pandas函数,然后将pandas数据框加载到polars中。

vsnjm48y

vsnjm48y3#

Polars没有这样的功能。但它基本上是一个实用的东西,而不是一个与框架相关的概念。因此,正如其他回复所提到的,最好使用其他解决方案。
flatdict很适合这个问题

In [376]: test = {
     ...:   "name": "Ravi",
     ...:   "Subjects": {
     ...:     "Maths": 92,
     ...:     "English": 94,
     ...:     "Hindi": 98
     ...:   }
     ...: }

In [377]: pl.DataFrame(dict(flatdict.FlatDict(test, delimiter=".")))
Out[377]:
shape: (1, 4)
┌──────┬────────────────┬──────────────────┬────────────────┐
│ name ┆ Subjects.Maths ┆ Subjects.English ┆ Subjects.Hindi │
│ ---  ┆ ---            ┆ ---              ┆ ---            │
│ str  ┆ i64            ┆ i64              ┆ i64            │
╞══════╪════════════════╪══════════════════╪════════════════╡
│ Ravi ┆ 92             ┆ 94               ┆ 98             │
└──────┴────────────────┴──────────────────┴────────────────┘

字符串

相关问题