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

问题描述 投票:0回答:1

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

例如:CSV 的结构

Manufacturer,oilType,viscosity
shell,superOil,1ova
shell,superOil,2ova
shell,normalOil,1ova
bp, power, 10bba

应以 JSON(预期输出)显示为

elements: [
    {
        "Manufacturer": "shell",
        "details": [
            {
                "OilType": "superOil",
                "Viscosity": [
                    "1ova",
                    "2ova"
                ]
            },
            {
                "OilType": "normalOil",
                "Viscosity": [
                    "1ova"
                ]
            }
        ]
    },
    {
        "Manufacturer": "bp",
        "details": [
            {
                "OilType": "power",
                "Viscosity": [
                    "10bba"
                ]
            }
        ]
    }
]

我目前已使用

openpyxl
将 CSV 转换为 JSON,并且每个标题的值以(当前输出)这样的格式显示

[{Manufacturer: "shell", oilType: "superOil", Viscosity:"1ova"},{...},{...},...]

请帮助获得预期的输出。

python json excel pandas openpyxl
1个回答
0
投票

您的问题实际上与

openpyxl
无关,因为您不需要保存到Excel文件中。

你可以思考:

  1. 将 csv(或 Excel)加载到 pandas
    DataFrame
  2. 按制造商和油类型分组
  3. 转储为您想要的格式
  4. 转换为 JSON(字符串或文件)

在实践中,这给出了类似的东西:

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
看起来像这样:

                           viscosity
Manufacturer    oilType 
bp              power       [10bba]
shell           normalOil   [1ova]
                superOil    [1ova, 2ova]
© www.soinside.com 2019 - 2024. All rights reserved.