首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel到嵌套Json,将子元素包含到数组中

Excel到嵌套Json,将子元素包含到数组中
EN

Stack Overflow用户
提问于 2022-05-19 18:50:07
回答 1查看 180关注 0票数 -1

我试图使用Python将Excel转换为嵌套的JSON,其中重复的值作为元素数组输入。

例: CSV的结构

代码语言:javascript
复制
Manufacturer,oilType,viscosity
shell,superOil,1ova
shell,superOil,2ova
shell,normalOil,1ova
bp, power, 10bba

应该在JSON (预期输出)中显示为

代码语言:javascript
复制
elements: [
    {
        "Manufacturer": "shell",
        "details": [
            {
                "OilType": "superOil",
                "Viscosity": [
                    "1ova",
                    "2ova"
                ]
            },
            {
                "OilType": "normalOil",
                "Viscosity": [
                    "1ova"
                ]
            }
        ]
    },
    {
        "Manufacturer": "bp",
        "details": [
            {
                "OilType": "power",
                "Viscosity": [
                    "10bba"
                ]
            }
        ]
    }
]

目前,我已经使用openpyxl将CSV转换为JSON,每个标头的值都以类似于(当前输出)的格式显示。

代码语言:javascript
复制
[{Manufacturer: "shell", oilType: "superOil", Viscosity:"1ova"},{...},{...},...]

请帮助获得预期的输出。

EN

回答 1

Stack Overflow用户

发布于 2022-05-20 04:44:14

你好,欢迎来到StackOverflow。

您的问题实际上与openpyxl无关,因为您不需要保存到Excel文件中。

你可以这样想:

DataFrame

  • Group
  1. 将csv (或Excel)加载到熊猫中,由制造商和石油类型
  2. 转储成您希望
  3. 转换为JSON (字符串或文件)的

格式

在实践中,这给出了这样的结果:

代码语言:javascript
复制
import json

import pandas as pd

df = pd.read_csv("oil.csv")  # or read_excel if this is an Excel
oils = df.groupby(["Manufacturer", "oilType"]).aggregate(pd.Series.to_list)

elements = [
    {
        "Manufacturer": manufacturer,
        "Details": [
            {"OilType": o, "Viscosity": v}
            for o, v in data.droplevel(0).viscosity.items()
        ],
    }
    for manufacturer, data in oils.groupby(level="Manufacturer")
]

with open("oil.json", "w") as f:
    json.dump({"elements": elements}, f)

有关信息,oils将如下所示:

代码语言:javascript
复制
                           viscosity
Manufacturer    oilType 
bp              power       [10bba]
shell           normalOil   [1ova]
                superOil    [1ova, 2ova]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72309703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档